0

私はobjectdatasourceでSQLサーバーにアクセスし、データテーブルを返して詳細ビューコントロールを埋めようとしています。選択したID値は、gridviewコントロールによって返されます。データテーブルがアダプタで埋められていないようで、理由がわかりませんでした。SQLのIDは、主キー(Int、4、nullではない)として設定されます。デバッガーは、詳細データテーブルがnullであると言います。どんな助けでも大歓迎です。

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

全てに感謝。

問題は、データテーブルを新しいインスタンスに初期化していないことです。

DataTable Detail = null; ===> DataTable Detail = new Datatable();

また、変換はコードではなく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 に答える
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 に答える