0

我正在尝试使用 objectdatasource 访问 sql server 并返回一个数据表来填充我的详细信息视图控件。选定的 ID 值由 gridview 控件返回。似乎数据表没有被适配器填充,我不知道为什么。sql中的ID设置为主键(Int, 4, not null)。调试器说 Detail 数据表为空。任何帮助深表感谢。

public DataTable GetDetail(string ID)
        {
            if (ID == "")
            {
                return null;
            }
            else
            {

                DataTable Detail = null;
                using (SqlConnection conn = new SqlConnection(connection))
                {
                    string comm = @"select * from dbo.Products where ID = @ID";
                    conn.Open();
                    SqlDataAdapter adapter=null;
                    using (SqlCommand cmd = new SqlCommand(comm, conn))
                    {
                        cmd.Parameters.Add("ID", System.Data.SqlDbType.Int, 4).Value = Convert.ToInt32(ID);
                        adapter = new SqlDataAdapter(cmd);
                        adapter.Fill(Detail);
                        return Detail;
                    }
                }
            }
4

3 回答 3

0

我想你错过了 commandType

cmd.CommandType = CommandType.Text;
于 2012-12-28T23:09:36.367 回答
0

试试这个

DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection(connection))
 {
    string myquery="select * from dbo.Products where ID = @ID";
    SqlCommand cmd = new SqlCommand(myquery, con);
    SqlDataAdapter dap = new SqlDataAdapter();
    dap.SelectCommand = cmd;
    cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 15).Value = ID;
    dap.Fill(ds);
    return ds.Tables[0];
  }
于 2012-12-29T06:39:53.623 回答
0

谢谢大家。

问题是我没有将我的数据表初始化为一个新实例。

数据表详细信息 = null; ===> 数据表详细信息 = 新数据表();

并且转换应该在 sql 中而不是在代码中完成。

cmd.Parameters.Add("ID", System.Data.SqlDbType.Int, 4).Value = ID;

string comm = @"select * from dbo.Products where ID = convert(int,@ID)";

于 2013-01-02T22:20:59.253 回答