DataGrid的DataSource不能是DataReader吧。
建议你这样处理:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = myCmd;
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataBind();
try it.

解决方案 »

  1.   

    是呀,到了正式版后,DATASET不能使用DATAREADER来填充,必须使用DATAADAPTER填充。
    (SQL使用SQLDATAADAPTER,OLEDB使用OLEDBDATAADAPTER)
      

  2.   

    看看下边的程序哪有问题呀。如果不往存储过程传参数,还可以出结果,现在总是查不到结果。存储过程的代码没变,还是
    CREATE PROCEDURE SelectIDFromName
    @FirstName varchar,
    @LastName varchar
     AS
    SELECT *
    FROM tblUser
    WHERE FirstName=@FirstName
    AND LastName=@LastName
    GOaspx代码如下:SqlDataAdapter myDA = new SqlDataAdapter("SelectIdFromName", myConn);
    myDA.SelectCommand.CommandType=CommandType.StoredProcedure;
    SqlParameter myParam;
    myParam=myDA.SelectCommand.Parameters.Add("@FirstName", SqlDbType.Char);
    myParam.Direction=ParameterDirection.Input;
    myParam.Value=tbFirst.Text;
    myParam.Value="z";
    myParam=myDA.SelectCommand.Parameters.Add("@LastName", SqlDbType.Char);
    myParam.Direction=ParameterDirection.Input;
    myParam.Value=tbLast.Text;
    DataSet ds = new DataSet();
    myDA.Fill(ds,"tblUser");
    DataGrid1.DataSource = ds.Tables["tblUser"].DefaultView;;
    DataGrid1.DataBind();
      

  3.   

    myParam=myDA.SelectCommand.Parameters.Add("@LastName", SqlDbType.Char);
    myParam.Direction=ParameterDirection.Input;
    myParam.Value=tbLast.Text;改为:
    SqlParameter myParam1;
    myParam1=myDA.SelectCommand.Parameters.Add("@LastName", SqlDbType.Char);
    myParam1.Direction=ParameterDirection.Input;
    myParam1.Value=tbLast.Text;
    try it.
      

  4.   

    天哪,你的存储过程写错了吧。
    参数的默认长度是1。该成:
    @FirstName varchar(30),
    @LastName varchar(30)这可是我调试好久才发现的:)
      

  5.   

    2个问题:1。存储过程写错了,varchar后面没有长度。2。DataGrid的DataSource不能是DataReader,只能是SqlDataAdapter.