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;
OracleBulkCopyOptions.UseInternalTransaction);
sqlBulk.DestinationTableName = "表名";
foreach(DataColumn column in dtTable.Columns)
sqlBulk.ColumnMappings.Add(column.ColumnName,column.ColumnName);
sqlBulk.WriteToServer(dtTable);
sqlBulk.Dispose();
sqlBulk.Close();
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 Server参数化SQL语句中的like和in查询的语法(C#)
SQL Server参数化SQL语句中的like和in查询的语法(C#)