关于使用SqlSugar ODBC 连接数据库问题的详细描述
JimmyTsai75 opened this issue · 12 comments
非常感谢这么快速的回复我上一个问题。
我现在把我的代码重新贴一遍:
using SqlSugar;
using SqlSugar.Odbc;
using System.Diagnostics;
namespace SugarOdbcTest
{
public partial class Form1 : Form
{
public SqlSugarClient db;
public Form1()
{
InitializeComponent();
//这行代码扔程序启动时
InstanceFactory.CustomAssemblies = new System.Reflection.Assembly[] { typeof(OdbcProvider).Assembly};
//按文档入门使用
db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.Odbc,
ConnectionString = "Dsn=SendMail;DataBase=SqlEmail;",
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (sql, p) =>
{
//这个地方设置断点,debug的时候有输出相关的sql语句
Debug.WriteLine(sql);
}
}
});
}
private void button1_Click(object sender, EventArgs e)
{
//var intValue=db.Ado.SqlQuerySingle<int>("select 1 from EmailInfo"); //这句可以正常返回 1
//var list = db.Ado.GetDataTable("select * from EmailInfo");//这句运行后就会出现一直等待
var res = db.Ado.SqlQuerySingle<dynamic>("select * from EmailInfo");//这句运行后也会出现一直等待
Debug.WriteLine("OK");
}
}
}
我的项目采用.net framework 6.0 在NuGet里面安装的依赖性是SqlSugar.OdbcCore 和 SqlSugarCore
我的ODBC 采用用户Dsn,这个SendMail测试是正常的,并且var intValue=db.Ado.SqlQuerySingle("select 1 from EmailInfo"); 这个语句可以正常返回也说明这个Dsn是可以的
现在的问题就是如果我是执行类似db.Ado.GetDataTable("select * from EmailInfo"); 这样的语句,就会出现一直等待的情况,没有采用异步操作,如果我把button1_Click改成async/await 也是一样的不可以
用原生DataReader测试 ,那基本可以确定是原生就不支持了
可能你这个DSN比较特别,其他数据库ODBC是可以的
var dr=db.Ado.GetDataReader();
while(dr.Read())
{
xxxx
}
找到原因了,我的数据库是mssql,我的Email这个表里面有一个字段EmailContent 这个字段的类型是text类型,里面的数据一行有3000多个字,我如果执行select top 2 [email_content] from EmailInfo 遇到有3000多个汉字的那个字段就会出现一直等到的情况,如果我不是使用odbc链接,这种情况是没有问题的
SC.Context = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true,
ConnectionString = AppConfig.ConnectionString,
});
但是如果我使用odbc连接,就会出现select里面有这种文字比较多的数据就会一直等待,请问这个有没有什么办法可以解决
找到解决办法了,升级ODBC驱动就可以了。另外有个新的问题:我用odbc连接的时候,我要如何让程序知道我连接的数据库时mssql。
我现在执行var list = db.Queryable().ToPageList(1, 5);的时候,我跟踪到的sql语句是用limit 来分页的,这个mssql里面是不支持的,我应该怎么配置才能让ToPageList正确解析成mssql语句的分页指令
我这个我支持一下吧,现在支持 databasemodel, 可以满足你需求 明天给你发布个版本
好的,太感谢了!
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.Odbc,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true,
MoreSettings=new ConnMoreSettings()
{
DatabaseModel=DbType.SqlServer
}
});
更新到这个版本 ,配置databasemodel支持了sqlserver分页 【 SqlSugar.OdbcCore 5.1.4.160】
非常感谢,使用新版本之后,问题解决!!
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Odbc, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { DatabaseModel=DbType.SqlServer } });更新到这个版本 ,配置databasemodel支持了sqlserver分页 【 SqlSugar.OdbcCore 5.1.4.160】
我设置了这个,但是我的数据库时SQL Server2008 ,不支持Offset Fetch Next ,那么这个时候如何使用ToPageList 呢?谢谢!
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Odbc, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { DatabaseModel=DbType.SqlServer } });更新到这个版本 ,配置databasemodel支持了sqlserver分页 【 SqlSugar.OdbcCore 5.1.4.160】
我设置了这个,但是我的数据库时SQL Server2008 ,不支持Offset Fetch Next ,那么这个时候如何使用ToPageList 呢?谢谢!
你们是一个人吗?不是一个人最好发新的issue 这个都关闭了。 这个是ODBC连接 ,你不会这么巧也需要用ODBC链接吧
关闭的我可能会忘记查看
我们不是同一个人