小弟刚刚学OleDb的连接方式,以前一直是SqlClient方式.
现遇到一个问题,调用的存储过程最后返回一个查询纪录,之前有一条insert语句,在查询分析器中一切正常,可是用SqlAdapter返回结果到datatable上却为空,一旦把那条insert语句柱石掉,就没了问题,请问是怎么回事?附上我的程序:
OleDbDataAdapter adp = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "usp_IPIInvPickup";
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;OleDbParameter paraUser = new OleDbParameter("@User", OleDbType.VarWChar, 50);
paraUser.Value = User;
cmd.Parameters.Add(paraUser);adp.SelectCommand = cmd;
adp.Fill(dt);存储过程主要为:
insert into IPI_SYSTEM values(14,1700000,14,'','',0,'','','','',8,1000000,14,0,'','',NULL, '2005/1/1',10,'510100200,214171581')select InvNo, CONumber from IPI_FS_INVOICE_COMBINE_TEMP where [User] = @User 
group by InvNo, CONumber
order by InvNo麻烦大家帮忙看看,谢谢.

解决方案 »

  1.   

    to deyangwangyu(wangyu),
    当然设了,呵呵.
      

  2.   

    OleDb支持同时执行两个SQL语句吗?
      

  3.   

    to chengbo1983(努力学习.Net!(asp.net C#)) ,
    啊?我不知道啊,不可以么?
    我都是在存储过程中做的啊,最后返回一个结果集,难道之前不能做其他操作么?
      

  4.   

    其实我也不知道
    你换成SqlDataAdapter试试,看行吗?
      

  5.   

    to chengbo1983(努力学习.Net!(asp.net C#)) ,
    之前用SqlClient连接方式时,用SqlDataAdapter接受结果,没有问题,现在改成了OleDb方式,换成OleDbDataAdapter为什么就不行了呢?
      

  6.   

    我想可能就是OleDb不支持吧刚才查了一下《ADO.Net技术内幕》在415页,有一段话——注意,不是所有数据库都支持返回行的成批查询。Microsoft SQL Server支持这种功能,Oracle和Microsoft Access数据库则不支持
      

  7.   

    to chengbo1983(努力学习.Net!(asp.net C#)) ,
    谢谢帮忙!
    请问什么叫返回行的成批查询啊?刚才又试了一下,注释掉存储过程中的insert行,在select语句前面加上了下面这一小段测试的垃圾行
    declare @hehe int
    set @hehe = 1结果一切正常?到底是什么原因啊?或者该如何写?
    这么晚了,谢谢大家.
      

  8.   

    比如:可以在提交一个更新后使用成批查询获取数据。可以结合更新查询以及用成批查询获取新的时间戳值的查询。将DataAdapter对象的UpdateCommand的CommandTex设置为下面的参数化查询:UPDATE [Order Details]
        SET OrderID = ?, ProductID = ?, Quantity = ?, UnitPrice = ?
        WHERE OrderID = ? AND ProductID = ? AND TSCol = ?;
    SELECT TSCol FROM [Order Details] WHERE OrderID = ? AND ProductID = ?但是注意:不是所有的数据库都支持返回行的成批查询
      

  9.   

    存储过程主要为:
    insert into IPI_SYSTEM values(14,1700000,14,'','',0,'','','','',8,1000000,14,0,'','',NULL, '2005/1/1',10,'510100200,214171581')
    set nocount on
    select InvNo, CONumber from IPI_FS_INVOICE_COMBINE_TEMP where [User] = @User 
    group by InvNo, CONumber
    order by InvNo试试看
      

  10.   

    在insert和select之间加上set nocount on
      

  11.   

    那SQL Server不是支持成批查询么?我就是用的SQL Server,而且以前用SqlClient方式连接数据库时没有问题.
      

  12.   

    注意,不是所有数据库都支持返回行的成批查询。Microsoft SQL Server支持这种功能,Oracle和Microsoft Access数据库则不支持
      

  13.   

    想问一下
    既然是Sql server,为什么要用OleDb?用SqlClient怎么不好了?
      

  14.   

    在insert和select之间加上set nocount on
      

  15.   

    to egxsun() ,
    加了set nocount on,依然没用。to chengbo1983(努力学习.Net!(asp.net C#)) ,
    主要是数据库里有中文的拉丁字符,用SqlClient的话没法转换,而用OleDb方式可以在定义连接串时设置Auto Translate=False来将乱字符转换成正确的中文。
      

  16.   

    SqlClient不行吗?
    如下SqlConnection nwindConn = new SqlConnection("user id=sa;password=haha;initial catalog=mydb;data source=myserver;Auto Translate=false;Connect Timeout=30;");
      

  17.   

    to chengbo1983(努力学习.Net!(asp.net C#)) ,
    试过了不行的,只有OleDb支持Auto Translate的设置.