c#如何拼接sql insert 语句??

kkk444dsfsa 2010-09-28 12:43:35
我要往sql中循环插入两条数据应该如何拼接这条语句呢?
for (int i=1 ;i<ds.getCount();i++)
{
sql="insert into hwxx(jydbh,hwmc,js,tj,zl)"
sqlhelper.RunSql(sql);
}
...全文
1064 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyz1137 2010-09-28
  • 打赏
  • 举报
回复
用DataTable吧

List<Object> list;//需要插入的数据
DataTable dt = new DataTable("表名称");
using (SqlConnection myConnection = new SqlConnection("数据库连接字符串"))
{
using (SqlDataAdapter da = new SqlDataAdapter("查询语句", myConnection))
{
SqlCommandBuilder scb = new SqlCommandBuilder(da);
da.Fill(dt);
DataRow workrow;
foreach (Object ojc in list)
{
workrow = dt.NewRow();
workrow["列名"] = "需插入数据";
workrow["列名"] = "需插入数据";
workrow["列名"] = "需插入数据";
...
}
DataTable changes = dt.GetChanges();
da.Update(changes);
dt.AcceptChanges();
dt.Clear();
da.Fill(dt);
}
}
yjvjom 2010-09-28
  • 打赏
  • 举报
回复
string commStr=string.Empty;
foreach(DataRow dr in ds.Rows)
{
commStr+="Insert Into hwxx(jydbh,hwmc) Values('"+dr["jydbh"]+"','"+dr["hwmc"]+"')+Environment.NewLine;
}
sqlhelper.RunSql(commStr);

在这里需要注意以下几点:
1.每一个Insert语句都应该以回车换行符结尾,即在语句结尾加上Environment.NewLine;
2.最好把这种批量执行的语句以事务的方式执行(比如SQL Server在C#中用SqlTransaction)
飞扬人生 2010-09-28
  • 打赏
  • 举报
回复
定义个sql数组,string sql[] =new string sql[ds.getCount()]
kkk444dsfsa 2010-09-28
  • 打赏
  • 举报
回复
sql2005
lrh_079 2010-09-28
  • 打赏
  • 举报
回复
楼主请写下是什么数据库,不同数据库的语法存在一些差异。
MSSQL入库多条数据可采用如下方式:
INSERT INTO table1(i) VALUES(1)
INSERT INTO table1(i) VALUES(2)

MySQL则需要分号:
INSERT INTO table1(i) VALUES(1);
INSERT INTO table1(i) VALUES(2)
或则以如下方式:
INSERT INTO table1(i) VALUES(1),(2)
flyerwing 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q107770540 的回复:]
sql="insert into hwxx(jydbh,hwmc) values('"+ds[i]+"','"+ds[i+1]+"')";
i++;

你是这意思?
[/Quote]
insert into tb(zd1,zd2......) values(@zd1,@zd2......);
建议用参数,拼接很容易出错的
明哥说编程 2010-09-28
  • 打赏
  • 举报
回复
生成一条sql插入语句,就执行数据库操作。
但是同时如果想保证全部都正确插入必须使用事务处理。
kkk444dsfsa 2010-09-28
  • 打赏
  • 举报
回复
我现在用的是
string records = Server.UrlDecode(Request.Params["records"].ToString());
int count = Convert.ToInt32(Request.Params["count"]);
string cmd2 = "";
for (int i = 0; i < count;i++ )
{
string[] s = records.Split('|');
cmd2 = "insert into Hwxx(jydbh,sxhh,hwmc,hwzjs,hwzzl,hwztj,djj,djf,djd,hwyf,hwhk,bxe,bxfl,bxf,jhf,zyf) values('" + jydbh + "'," + sxhh + ",'" + s[i].ToString().Trim() + "'," + Convert.ToInt32(s[i+1]) + "," + Convert.ToDecimal(s[i+2]) + "," + Convert.ToDecimal(s[i+3]) + "," + Convert.ToInt32(s[i+4]) + "," + Convert.ToDecimal(s[i+5]) + "," + Convert.ToInt32(s[i+6]) + "," + Convert.ToInt32(s[i+7]) + "," + Convert.ToInt32(s[i+8]) + "," + Convert.ToDecimal(s[i+9]) + "," + Convert.ToDecimal(s[i+10]) + "," + Convert.ToDecimal(s[i+11]) + "," + Convert.ToDecimal(s[i+12]) + "," + Convert.ToDecimal(s[i+13]) + ")";
sqlHelp.RunSQL(cmd2);
}
以上语句如果只有一行数据的话 是可以的 但是如果有两行 三行的话 就不行了
aoin2006 2010-09-28
  • 打赏
  • 举报
回复
我们的qq群号 34764783 欢迎进来讨论
aoin2006 2010-09-28
  • 打赏
  • 举报
回复

DataTable dt = new DataTable();
StringBuilder sb = new StringBuilder();
sb.Append("insert into hwxx(jydbh,hwmc)");
foreach (DataRow dr in dt.Rows)
{
sb.AppendLine(string.Format("SELECT '{0}','{1}' ", dr["jydbh"], dr["hwmc"]));
sb.AppendLine(" Union All ");
}
sqlhelper.RunSql(sb.ToString().Remove(sb.ToString().LastIndexOf("Union All ")));



最终sql语句为

insert into hwxx(jydbh,hwmc)
SELECT 'aa','aa'
union all
select 'bb','bb'

kkk444dsfsa 2010-09-28
  • 打赏
  • 举报
回复
string cmd2 + == "insert into hwxx(jydbh,sxhh,hwmc,hwzjs,hwzzl,hwztj,djj,djf,djd,hwyf,hwhk,bxe,bxfl,bxf,jhf,zyf) values('" + jydbh + "'," + sxhh + ",'" + s[i].ToString().Trim() + "'," + Convert.ToInt32(s[i+1]) + "," + Convert.ToDecimal(s[i+2]) + "," + Convert.ToDecimal(s[i+3]) + "," + Convert.ToInt32(s[i+4]) + "," + Convert.ToDecimal(s[i+5]) + "," + Convert.ToInt32(s[i+6]) + "," + Convert.ToInt32(s[i+7]) + "," + Convert.ToInt32(s[i+8]) + "," + Convert.ToDecimal(s[i+9]) + "," + Convert.ToDecimal(s[i+10]) + "," + Convert.ToDecimal(s[i+11]) + "," + Convert.ToDecimal(s[i+12]) + "," + Convert.ToDecimal(s[i+13]) + ")";
无效的表达式
wupeng7654111 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuberlin 的回复:]
string sql;
for (int i=1 ;i<ds.getCount();i++)
{
sql+ =="insert into hwxx(jydbh,hwmc) values('"+ds[i]+"','"+ds[i+1]+"')";
}

sqlhelper.RunSql(sql);
[/Quote]
这个可以的
哥子谭 2010-09-28
  • 打赏
  • 举报
回复

StringBuilder sb = new StringBuilder ();
for (int i = 1; i < ds.getCount(); i++)
{
sb.Append("insert into hwxx(jydbh,hwmc,js,tj,zl)");

}
sqlhelper.RunSql(sql);
zcfzcf001 2010-09-28
  • 打赏
  • 举报
回复
10楼方法正解;另外,如果保存的数据不是很大,可一次批量存入;
如果预计保存的数据量很大,建议分段处理,比如100或1000条插入语句,为一批更新,确保在一个事务里。
kkk444dsfsa 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiaottyy 的回复:]
sql语句嵌套?
[/Quote]

怎么嵌套啊
liweibird 2010-09-28
  • 打赏
  • 举报
回复
把每一行数据生成一个Insert语句,即一个Insert插入一行数据到数据库。
然后用一个事务,一次性提交所有的Insert语句。
HaveOneDream 2010-09-28
  • 打赏
  • 举报
回复
用EXT吗,按2楼的方法拼凑完后统一执行
kkk444dsfsa 2010-09-28
  • 打赏
  • 举报
回复

我是要将图中的数据保存到数据库 ,行数不固定 ,已经可以得到每列的数据了
通过判断行数插入数据
xiaottyy 2010-09-28
  • 打赏
  • 举报
回复
sql语句嵌套?
yanele 2010-09-28
  • 打赏
  • 举报
回复
这个方法平常很有用!
加载更多回复(9)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧