执行对不同的数据库相同的查询为什么会出现不同的结果
在一段visualc#程序里面有以下的一段语句:OleDbDataAdapterdp=newOleDbDataAdapter("selectidfromsys",conn...
在一段visual c#程序里面有以下的一段语句:
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
dp.Dispose();
我分别在ACCESS里和SQLserver里建立了相同的表sys,里面有2行数据id为1、2,但是分别对两个数据库执行上面的查询程序时,发现ACCESS返回的结果是正常的,MakeTree函数运行了2次,即:
MakeTree(1)和MakeTree(2)
但是SQLserver返回的结果却是重复了一倍,MakeTree函数运行了4次。即:
MakeTree(1)、MakeTree(2)、MakeTree(1)和MakeTree(2)
请教高手这是为什么呢?是SQLserver设置有问题还是程序有问题?
to makosharp:谢谢您的答复,但是问题可能不是出在这里,因为dt是刚刚建立的,实际上原句是
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
DataTable dt = new DataTable("syspi");
dp.Fill(dt);
我觉得可能出问题的地方是,我在安装SQLserver的时候曾经建立了一个“NOTEBOOK/LTF”的库,NOTEBOOK也是计算机名,用了一阵后觉得不方便,我又建立了一个“NOTEBOOK”的库,里面的内容(表)跟“NOTEBOOK/LTF”是一样的,后来我又在企业管理器里面把“NOTEBOOK/LTF”这个库删除了,但是我发现SQL server服务管理器上还是显示服务器有两个:“NOTEBOOK/LTF”和“NOTEBOOK”,但是我在另外一台联网的机器上运行查询分析器时,又只发现有“NOTEBOOK”的SQL服务器 展开
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
dp.Dispose();
我分别在ACCESS里和SQLserver里建立了相同的表sys,里面有2行数据id为1、2,但是分别对两个数据库执行上面的查询程序时,发现ACCESS返回的结果是正常的,MakeTree函数运行了2次,即:
MakeTree(1)和MakeTree(2)
但是SQLserver返回的结果却是重复了一倍,MakeTree函数运行了4次。即:
MakeTree(1)、MakeTree(2)、MakeTree(1)和MakeTree(2)
请教高手这是为什么呢?是SQLserver设置有问题还是程序有问题?
to makosharp:谢谢您的答复,但是问题可能不是出在这里,因为dt是刚刚建立的,实际上原句是
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
DataTable dt = new DataTable("syspi");
dp.Fill(dt);
我觉得可能出问题的地方是,我在安装SQLserver的时候曾经建立了一个“NOTEBOOK/LTF”的库,NOTEBOOK也是计算机名,用了一阵后觉得不方便,我又建立了一个“NOTEBOOK”的库,里面的内容(表)跟“NOTEBOOK/LTF”是一样的,后来我又在企业管理器里面把“NOTEBOOK/LTF”这个库删除了,但是我发现SQL server服务管理器上还是显示服务器有两个:“NOTEBOOK/LTF”和“NOTEBOOK”,但是我在另外一台联网的机器上运行查询分析器时,又只发现有“NOTEBOOK”的SQL服务器 展开
展开全部
从你的说明来看,数据肯定是没问题的了,而设置也不会造成这种情况,所以我猜有可能是程序的问题了。
adapter的Fill方法默认是将读取到的新数据【添加】到你指定的DataSet里,所以如果你对比测试两个数据库时写成了这样:
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn2);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
那dt中就一定会是1212,因为你连续Fill了两次。要避免这种情况应该在Fill前写入dt.Clear();
以上是猜测,如果不是这个原因,请QQ或者百度信箱联系我详细描述下好让我帮你解决问题。
QQ176229432 周1~5上班时间在线
adapter的Fill方法默认是将读取到的新数据【添加】到你指定的DataSet里,所以如果你对比测试两个数据库时写成了这样:
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn2);
dp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MakeTree(dr["id"].ToString());//一个自定义的函数
}
那dt中就一定会是1212,因为你连续Fill了两次。要避免这种情况应该在Fill前写入dt.Clear();
以上是猜测,如果不是这个原因,请QQ或者百度信箱联系我详细描述下好让我帮你解决问题。
QQ176229432 周1~5上班时间在线
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询