0

SQL Server 2008 データベースに新しいレコードを挿入したいと考えています。一部の列の値が NULL であるため、エラーが発生します。これは私が使用しているSQLクエリです:

INSERT INTO Products VALUES(NEWID(), '" + cur.name + "', '" + cur.type + "');

次のように読み取られるため、値が NULL の場合、エラーが発生します。NEWID(), , ;

たくさんの if ステートメントを実行できますが、もっと効率的な方法が必要です。よろしくお願いします。

4

2 に答える 2

4

C# は、すべての null 値を同等の DBNull 値に正しく変換していないようです。

次のようなものを試してください

string sql = "INSERT INTO Products 
VALUES(NEWID(), @cName, @cType)";

SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@cName", cur.name == null ? (object)DBNull.Value : cur.name);
cmd.Parameters.AddWithValue("@cName", cur.type == null ? (object)DBNull.Value : cur.type);

cmd.Execute();

現在のクエリは sql インジェクションの可能性があるため、パラメーター化されたクエリを使用する方が良い解決策です。また、null 値のチェックも可能です。

または、値を空にする必要がある場合は、次のようなものを使用します

cmd.Parameters.AddWithValue("@cName", cur.type == null ? "" : cur.type);
于 2013-11-11T10:15:38.120 に答える
0

null本当にデータベースに挿入したい場合は、DBNull.Value

于 2013-11-11T10:15:14.483 に答える