OleDbConnection conn = new OleDbConnection(sConn);
conn.Open();
OleDbCommand odc = new OleDbCommand("GetUserInfo",conn);
                  odc.CommandType = CommandType.StoredProcedure;
odc.Parameters.Add("@sSex",OleDbType.VarChar,2);
odc.Parameters["@sSex"].Value = "男";
odc.Parameters.Add("@sName",OleDbType.VarChar,50);
odc.Parameters["@sName"].Value = "张三";
OleDbDataAdapter at = new OleDbDataAdapter(odc);
DataSet ds = new DataSet();
at.Fill(ds,"TgUser");
return ds;
CREATE PROCEDURE dbo.GetUserInfo 
@sName varchar,@sSex varchar
 AS
Select * from TgUser where sName=@sName and sSex= @sSex
GO
改成这样,也还是不行,咋回事呀?

解决方案 »

  1.   

    问题出在存储过程里面
    CREATE PROCEDURE dbo.GetUserInfo 
    @sName varchar(10),@sSex varchar(10)
     AS
    Select * from TgUser where sName=@sName and sSex= @sSex
    GO改成这样就OK了
    注意varchar的长度
      

  2.   

    你把程序中parameters的大小改得和存储过程中的大小一至试试
      

  3.   

    已经改了,sSex 2 sName 50,还是不行。555555555555CREATE PROCEDURE dbo.GetUserInfo 
    @sName varchar(50),@sSex varchar(2)
     AS
    Select * from TgUser where sName=@sName and sSex= @sSex
    GO
      

  4.   

    DataSet ds = new DataSet();
    at.Fill(ds,"TgUser");
    //我加了这两句,i返回为1
    int i = ds.Tables.Count;
    //这里报错了:在位置 0 处没有任何行。说明的确没有取出记录,但数据库里是有的。
    string s = ds.Tables[0].Rows[0][1].ToString();
    return ds;在页面我是绑定到DataGrid中的,自动生成列,DataGrid是绝对好用的。就是ds没有填充或者是记录没有取到。实在不明白呀!请赐教!
      

  5.   

    exec GetUserInfo 
    @sname='张三',@sSex='男'在SQLServer的查询分析器里面执行一下,如果没有结果那就不用看.net的代码了,问题一定出在存储过程或表里面
      

  6.   

    死马当作活马医:1.既然你使用SQL Server那就不该使用OleDbConnection(她好像不支持@xxx的参数,只支持?参数的说,希望我没记错)2.既然你使用SQL Server那就该把这种罗嗦的sql语句写到存储过程里3.个人偏向字符串使用nvarchar有说错的请大家指正,,,
      

  7.   

    问题解决了,是存储过程的参数顺序与源码中的参数顺序不一致。把下面这个
    odc.Parameters.Add("@sSex",OleDbType.VarChar,2);
    odc.Parameters["@sSex"].Value = "男";
    odc.Parameters.Add("@sName",OleDbType.VarChar,50);
    odc.Parameters["@sName"].Value = "张三";
    顺序变一下
    odc.Parameters.Add("@sName",OleDbType.VarChar,50);
    odc.Parameters["@sName"].Value = "张三";
    odc.Parameters.Add("@sSex",OleDbType.VarChar,2);
    odc.Parameters["@sSex"].Value = "男";
    真没想到是这鸟问题,谢谢大家了。