C#:如何在MySQL中的Insert Statement中动态插入多个param

时间:2012-11-05 12:27:45

标签: c# asp.net mysql

在我的场景中,我想插入具有15列数据的sql语句。是否有其他方式来处理insert语句的参数?

    public bool GetCustomersList(ref DataSet dataset, String x, String y, string z, string x1, string y1, string z1 )
    {
        MySqlConnection SQLConn = GetConnection();
        try
        {
            string get_records;
            if (SQLConn.State == ConnectionState.Closed)
            {
                SQLConn.Open();
            }
            if (searchtype == "x")
            {
                get_records = "INSERT into table values(x, y,z,x1,y1,z1);
            }
            MySqlCommand command = new MySqlCommand(get_records, SQLConn);
            MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(command);
            mySqlAdapter.Fill(dataset);

            if (SQLConn.State == ConnectionState.Open)
            {
                SQLConn.Close();
            }
            return true;
        }
        catch (Exception )
        {
            if (SQLConn.State == ConnectionState.Open)
            {
                SQLConn.Close();
            }
            return false;
        }
    }

这里的参数可以扩展到15或更多?如何在asp.net中处理这种情况?

3 个答案:

答案 0 :(得分:1)

我建议你使用:

command.Parameters.Add( ... );

答案 1 :(得分:1)

这样就可以了。

            List<SqlParameter> myParamList = new List<SqlParameter>();
            SqlParameter myParam = default(SqlParameter);


            myParam = new SqlParameter("@RoomID", SqlDbType.Int);
            myParam.Value = x
            myParamList.Add(myParam);

基本上,您创建参数列表,并为每个参数使用新的SqlParameter添加它,注意Item name&amp;项目类型。

然后将参数列表添加到命令中。

答案 2 :(得分:0)

来自MSDN

  

使用CreateParameter方法创建一个带有的新Parameter对象   指定的名称,类型,方向,大小和值。您传递的任何值   在参数中写入相应的参数   属性。

使用内联参数是不安全的,可能会导致sql注入。使用SqlParameter代替{。}}方式为.Net中的sql语句提供参数。

此外,如果您希望更加纯粹,并且根据代码中的特定实现取消相同的内容,请使用更多接口,例如:

using (var connection = GetConnection())
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandType = CommandType.Text;
        command.CommandText = "INSERT into table(x, y) VALUES (@x, @y)";
        command.Parameters.Add(CreateParameter(command, "@x", x, DbType.String));
        command.Parameters.Add(CreateParameter(command, "@y", y, DbType.String));
        command.ExecuteNonQuery();
    }
}

您的自定义CreateParameter包装器具有以下实现:

private IDataParameter CreateParameter(IDbCommand command, string name, object value, DbType type)
{
    var parameter = command.CreateParameter();
    parameter.ParameterName = name;
    parameter.Value = value;
    parameter.DbType = type;
    return parameter;
}

同样,您会抛弃冗余的特定类类型,例如:MySqlCommandSqlParameter。此外,没有必要使用try{} catch{}Using语句将关闭dispose上的连接,即使抛出异常也是如此。如果您不需要,请不要在每次请求时/之后打开和关闭连接。利用prefered and more secure