2016-05-09 10 views
0

、私はC#のコードのこの種を使用してデータベースにNULL値を挿入できます。パラメータを使用せずにC#でデータベースにnull値を挿入するにはどうすればいいですか? SQLパラメータを使用して

string query = "INSERT INTO table_name (column_name) VALUES (@value)"; 
using (SqlConnection connection = new SqlConnection(/* connection info */)) 
{ 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { 
     command.Parameters.Add("@value", DBNull.Value); 
     command.ExecuteNonQuery(); 
    } 
} 

パラメータを使用していないがため、通常SQLインジェクションといくつかの他の理由で、悪い習慣であると考えられています。しかし、私は彼らを使用せずにそうする方法があるかどうかを知りたいと思っています。このような何か:

var nullValue = DBNull.value; 
string query = "INSERT INTO table_name (column_name) VALUES (" + nullValue + ")"; 

かさえ:

string query = "INSERT INTO table_name (column_name) VALUES (\\NULL\\)"; 

または何でも。ありがとう。

+0

あなたが直面している問題は何? – Raghuveer

+0

私は問題に直面しません。ただ興味があるだけ。 :) – Sipo

答えて

4

「はい」です。あなたはそれを行うことができます。カラムが常にNULLであることが確実であれば、SQL文をこのように完全な文字列で書くことができます。

string query = "INSERT INTO table_name (column_name) VALUES (NULL)"; 

ユーザーからの入力を受けた場合は、決してこれを実行しないでください。これは正確に注入される方法です。 nullValueが文字列NULL); DROP TABLE table_nameのようなものが含まれている場合

var nullValue = DBNull.value; 
string query = "INSERT INTO table_name (column_name) VALUES (" + nullValue + ")"; 

注入が起こるでしょう。 NULL);があなた自身のSQLを完成させて、より多くのSQLコードがあなたのデータを混乱させるようにします。

ウェブ開発の第1のルール。決してユーザーデータを信頼してはいけません。パラメータを使用します。

using(SqlConnection connection = new SqlConnection("connection_String")) 
{ 
    string query = "INSERT INTO table_name (column_name) VALUES (@val1)"; 

    using(SqlCommand inputQuery = new SqlCommand(query)) 
    { 
     inputQuery.Connection = openCon; 
     inputQuery.Parameters.AddWithValue("@val1", DBNull.Value); 
     try 
     { 
      connection.Open(); 
      int recordsAffected = inputQuery.ExecuteNonQuery(); 
     } 
     catch(SqlException) 
     { 
      // error here 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
} 
2

これを試してみてください。..

command.Parameters.AddWithValue(
"@ProductName", 
// this requires a cast as ?: must return the same type 
String.IsNullOrWhiteSpace(productName) 
    ? (object)DBNull.Value 
    : (object)productName 
); 
+0

あなたのコードはパラメータを使用しています...私はそれらを使用せずにこれを行う方法を知りたいです。感謝。 :) – Sipo

関連する問題