如何在不使用参数的情况下在C#中向数据库插入空值?

如何在不使用参数的情况下在C#中向数据库插入空值?,c#,sql,sql-server,C#,Sql,Sql Server,使用SQL参数,我可以使用这种C代码向数据库插入NULL值: 由于SQL注入和其他一些原因,不使用参数通常被认为是不好的做法。但是,我很想知道是否有一种不用它们的方法可以做到这一点。大概是这样的: var nullValue = DBNull.value; string query = "INSERT INTO table_name (column_name) VALUES (" + nullValue + ")"; 甚至: string query = "INSERT INTO table_

使用SQL参数,我可以使用这种C代码向数据库插入
NULL
值:

由于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\\)"; 

或者别的什么。谢谢。

嗯,是的。您可以这样做,如果您确定列应该始终为NULL,那么您可以简单地用完整的字符串编写SQL语句,如下所示

string query = "INSERT INTO table_name (column_name) VALUES (NULL)";
如果你从用户那里获取输入,那么永远不要这样做,这正是你被注入的方式

var nullValue = DBNull.value;
string query = "INSERT INTO table_name (column_name) VALUES (" + nullValue + ")";
如果
nullValue
包含类似字符串
NULL)的内容,则会发生注入;删除表格名称
。其中
NULL)只需完成您自己的SQL,就可以使用更多的SQL代码来破坏您的数据

web开发的第一条规则。永远不要信任用户数据。使用参数

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();
        }
    }
}
请试试这个

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

你面临什么问题?我没有面临任何问题。我只是好奇您的代码使用参数。。。我想知道如何在不使用它们的情况下做到这一点。谢谢。:)
command.Parameters.AddWithValue(
"@ProductName",
// this requires a cast as ?: must return the same type
String.IsNullOrWhiteSpace(productName)
    ? (object)DBNull.Value
    : (object)productName
);