C# 中参数化拼接SQL语句插入数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 中参数化拼接SQL语句插入数据库相关的知识,希望对你有一定的参考价值。

如题!比如有表 table1,四个字段user ,pwd,sex,age
在C# 中如何使用参数化一次插入多条数据呢!比如用select union all 语句或者其它的方法!

三个步骤:

    第一步:声明数据库连接对象:

       Sqlconnection connection=new Sqlconnection(ConnectionString);

    第二步:声明数据库操作对象:

      两种途径:

    直接以字符串拼接的方式形成sql语句,比如:

    sqlstr="insert into usertab(uid,pwd) values('"+uidtxt+"','"+pwdtxt+"')";

    SqlCommand command = new SqlCommand(sqlstr, connection);

    以参数占位的先行成形式语句,然后对参数实行绑定,比如:

       sqlstr="insert into usertab(uid,pwd) values(@uidtxt,@pwdtxt)";

      SqlCommand command = new SqlCommand(sqlstr, connection);

       command.Parameters.Add("@uidtxt", SqlDbType.Text);
       command.Parameters["@uidtxt"].Value =uidtxt;

      command.Parameters.Add("@pwdtxt", SqlDbType.Text);
      command.Parameters["@pwdtxt"].Value =uidtxt;

    执行数据库操作:

       command.ExecuteNonQuery();

       connection.close();

参考技术A SQL语句 都是 insert into table1(user ,pwd,sex,age)values (@user ,@pwd,@sex,@age), 在C# 用 for 循环去逐行插入,con 在for 循环之前open,循环结束后关闭con。

四个字段就是4个参数,@user ,@pwd,@sex,@age

给分吧,标准的操作。
参考技术B

      添加引用Oracle.DataAccess.dll

      using Oracle.DataAccess.Client;

OracleBulkCopy sqlBulk = new OracleBulkCopy("User ID=root;Password=***;Data Source=xx.x.x.x;",
  OracleBulkCopyOptions.UseInternalTransaction);
  sqlBulk.DestinationTableName = "表名";
  foreach(DataColumn column in dtTable.Columns) 
  sqlBulk.ColumnMappings.Add(column.ColumnName,column.ColumnName);
  
  sqlBulk.WriteToServer(dtTable);
  sqlBulk.Dispose();
  sqlBulk.Close();

  

  

参考技术C 将你查询的语句一条一条的插入到datatable里面,然后批量插入数据库表单中用下面的方法
public void InsertTable(DataTable table1,string tablename) // table1要插入的数据 tablename 数据库表单名称

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy("数据库连接字符串", SqlBulkCopyOptions.UseInternalTransaction);
sqlBulkCopy.DestinationTableName = tablename;

if (table1 != null && table1.Rows.Count != 0)

sqlBulkCopy.WriteToServer(table1);

sqlBulkCopy.Close();
追问

数据库表单就是数据库中的表名吗?

追答

参考技术D 可以使用xml当参数之后 在用存储过程接收,例如
DECLARE @idoc int
DECLARE @doc nvarchar(max)
SET @doc ='
<roots>
  <root>
    <id>1</id>
    <name>a</name>
  </root>
  <root>
    <id>2</id>
    <name>b</name>
  </root>
</roots>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT
*
FROM OPENXML (@idoc, '/roots/root',2)
WITH (id nvarchar(10),name nvarchar(100))
insert into ....

SQL Server参数化SQL语句中的like和in查询的语法(C#)

sql语句进行 like和in 参数化,按照正常的方式是无法实现的
//SqlParameter 会把where insert delete等字符原样的插入写入查询到sql语句中,而不会让这些关键字产生效果。。。。。。

我们一般的思维是:

Like参数化查询:
string sqlstmt = "select * from users where user_name like '%@word%' or mobile like '%@word%'";
SqlParameter[] Parameters=new SqlParameter[1];
Parameters[0] = new SqlParameter("@word", "123");

In参数化查询:
string sqlstmt = "select * from users where user_id in (@user_ids)";
SqlParameter[] Parameters = new SqlParameter[1];
Parameters[0] = new SqlParameter("@user_ids", "1001,1002,1006");
可是这样放在程序里面是无法执行的,即使不报错,也是搜索不出来结果的。

正确解法如下:

like 参数:
string sqlstmt = "select * from users where user_name like '%'+ @word + '%' or mobile like '%'+ @word + '%'";
SqlParameter[] Parameters=new SqlParameter[1];
Parameters[0] = new SqlParameter("@word", "123");

in 参数
string sqlstmt = "exec('select * from users where user_id in ('+@user_ids+')')";
string sqlstmt = $"select * from users where user_id in('string.Join("','",@user_ids)');//貌似这种写法也是可以的,
SqlParameter[] Parameters = new SqlParameter[1];
Parameters[0] = new SqlParameter("@user_ids", "1001,1002,1006");

原理解释:
SQL参数化查询,其实是可以在SQL的IDE(Microsoft SQL Server Management Studio)中测试的。
打开Microsoft SQL Server Management Studio,新建查询,在窗口中写入以下命令:


-- Like参数化查询命令
DECLARE @word VARCHAR(255);
SET @word='123';
SELECT * from users where user_name like '%'+@word+'%' or mobile like '%'+@word+'%';
这就是Like参数化查询的等效命令;

同理,以下是In参数话查询命令:
DECLARE @user_ids VARCHAR(255);
SET @user_ids='1001,1002,1006';
exec('select * from users where user_id in ('+@user_ids+')');

以上是关于C# 中参数化拼接SQL语句插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

sql语句加参数

SQL Server C# 无法插入数据库

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

通过Mybatis执行拼接的SQL批量插入数据并返回数据库自增ID