通过stringBuilder将null插入到mysql C#中

时间:2016-11-22 20:48:51

标签: c# mysql .net stringbuilder

当我运行以下代码时,null不会存储在数据库中,而是我得到一个空字符串。有办法吗?

    string ConnectionString = "server=localhost; password = p@ss1234; user = root; database=DB ";
        StringBuilder sCommand = new StringBuilder("INSERT INTO mytable (Name) VALUES ");
        string A = null;
        using (MySqlConnection mConnection = new MySqlConnection(ConnectionString))
        {
            List<string> Rows = new List<string>();
            for (int i = 0; i < 100000; i++)
            {
                Rows.Add(string.Format("('{0}')", A));
            }
            sCommand.Append(string.Join(",", Rows));
            sCommand.Append(";");
            mConnection.Open();
            using (MySqlCommand myCmd = new MySqlCommand(sCommand.ToString(), mConnection))
            {
                myCmd.CommandType = CommandType.Text;
                myCmd.ExecuteNonQuery();
            }
        }

1 个答案:

答案 0 :(得分:1)

替换它:

string.Format("('{0}')", A));

用这个:

A == null ? "(null)" : string.Format("('{0}')", A));

更新

使用格式化程序:

string.Format(new SqlFormatter(), "({0}, {1})", null, A);

格式化程序:

public class SqlFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        return arg == null ? "null" : string.Format("'{0}'", arg);
    }
}