-2

データテーブルに null 値があり、この null 値を整数変数に入れようとしています。

SqlConnection con = new SqlConnection("Initial Catalog=test;Data Source=test;user id=sa;password=****;");
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from table1", con);

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++)
{
    **int? ii = dt.Rows[i];**
    if (ii == null)
    {
        test.Text = ii.ToString() + "Test";
    }
}
4

2 に答える 2

2

コードにいくつかの基本的なエラーがあります。以下は説明されているエラーの一部です。回答の最後には、コードを書き直す方法の提案があります。


行から、そして今はセルからデータを取得しようとしています。データは行セルに格納されます。

var row = dt.Rows[i]; // row contains several columns, you have to get from specific column
var ii = dt.Rows[i]["iiColumnName"];

オブジェクトのメソッドを使用していnullます。ii がnullあり、そのメソッドを呼び出そうとすると、例外がスローされ、アプリケーションがクラッシュします。

if (ii == null)
{
    test.Text = ii.ToString() + "Test"; // This will throw NullReferenceException
}

と比較して、値が存在するかどうかを確認していますnull。セル値がnullDataTable に含まれることはありません。値は代わりにDBNull.Value. したがって、次の 2 つの方法のいずれかで値が設定されているかどうかを確認します。

if (ii is DBNull) { /* do something */ }
if (ii == DBNull.Value) { /* do something */ }

あなたが望むことをするコードは(うまくいけば)次のようになります:

SqlConnection con = new SqlConnection("Initial Catalog=test;Data Source=test;user id=sa;password=****;");
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from table1", con);

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow row = dt.Rows[i];
    int? ii;
    if (row["iiColumnName"] is DBNull)
        ii = null;
    else
        ii = (int)row["iiColumnName"];

    if (ii != null)
        test.Text = ii.ToString() + "Test";
    else
        test.Text = "ii is not set";
}
于 2013-03-21T16:53:01.560 に答える
-1

にキャストするint?

int? ii = dt.Rows[i] as int?;

dt.Rows[i]値が。でない場合int、iiはnullになり、そうでない場合は、に格納されている整数値になりますdt.Rows[i]

于 2013-03-21T16:43:24.737 に答える