工作关系,接触最多的数据库还是微软的SQL Server,所以哪怕玩树莓派,都想着如何访问一下MSSQL。目前我能想到并且测试成功的有Python和PHP,以及能带UI的QT。Python和QT需要安装unixodbc,php则需要php-sybase库。最近突然又想起久闻大名的mono了,何不也试试?
说干就干,sudo apt-get install mono-complete
暂时只需要那么多。
开个文本编辑器输入测试代码,保存为test.cs:
using System;
using System.Data;
using System.Data.SqlClient;
namespace Test
{
class Program
{
static void Main(string [] args)
{
Console.WriteLine("MSSQL 测试(编译@RPI)...\r\n");
Console.WriteLine(GetVersion());
}
static string GetVersion()
{
//string conn = "server=192.168.1.10;database=master;user id=sa;password=****;";
string conn = "server=192.168.1.10;database=A;user id=sa;password=****";
// string sql = "select @@version";
string sql = "select top 1 Remark from mono_test";
using(SqlConnection db = new SqlConnection(conn))
{
SqlCommand cmd = new SqlCommand(sql,db);
try
{
db.Open();
string x = cmd.ExecuteScalar().ToString();
return x;
}
catch(Exception ex)
{
return ex.Message;
}
finally
{
cmd.Dispose();
db.Close();
}
}
}
}
}
然后编译:
mcs test.cs -r:System.Data
没有警告也没有错误。ls发现生成了test.exe了。用file命令验证,报告是PE32的可执行文件。最后用mono test.exe运行,成功获取Sql Server中的数据,而且中文亦无乱码。
把这个exe复制到windows下,运行也毫无问题:
有趣。那么,在Windows下用VS编译的console exe能在树莓派下运行吗?
打开VS2017,新建一个Windows 经典桌面的Console项目,.net framework版本4.5.2(当前mono的默认使用版本,可在树莓派中运行mcs --help,在-sdk选项中确认),将test.cs中的核心代码都复制过去(为了方便区分之前的代码,namespace改成了rpitest,提示语也改成了“编译@Windows”):
编译,得到了windows下生成的rpitest.exe。将其复制到树莓派里,运行mono rpitest.exe,也能成功查询!
哈,有点儿意思。
==== windows UI 照样支持 ====