sql server2005 Insert数据报错

fangpengyu 2010-08-26 03:22:07
SWBOM.C_PART_MAP_T表有三个栏位,compal_pn,cust_pn,model,(compal_pn与cust_pn是联合主键)
插入的值
compal_pn cust_pn model
JITR1320022 59-014967 JITR1
JITR1320021 59-014926 JITR1


报错信息:
變數名稱 '@COMPALPN' 已經宣告。變數名稱在一個查詢批次或預存程序內必須是唯一的。




public void InsertTXT(DataSet ds, SqlCommand command)
{
if (ds != null)
{
string sql = @" INSERT INTO [SWBOM.C_PART_MAP_T]
([compal_pn],[cust_pn],[model])
VALUES (@COMPALPN,@CUSTPN,@SKU) ";
DataTable dt = new DataTable();
dt = ds.Tables[0];
int count=dt.Rows.Count;
if (count > 0)
{
command.CommandText = sql;
for (int i = 0; i <= count-1; i++)//减一是把第一行标题去掉
{
string ss = dt.Rows[i][0].ToString();
string ff = dt.Rows[i][1].ToString();
string dd = dt.Rows[i][2].ToString();
command.Parameters.AddWithValue("@COMPALPN", dt.Rows[i][0].ToString());
command.Parameters.AddWithValue("@CUSTPN", dt.Rows[i][1].ToString());
command.Parameters.AddWithValue("@SKU", dt.Rows[i][2].ToString());
command.ExecuteNonQuery();
}
}
}

}
#endregion

#region UnionOperTxT TxT Data
public ExecutionResult UnionOperTxT(DataSet ds) //先Delete表数据,然后Insert
{
ExecutionResult exeRes = new ExecutionResult();
SqlTransaction transaction = null;
try
{
transaction = connection.BeginTransaction();
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.Transaction = transaction;
this.InsertTXT(ds, command);
transaction.Commit();
exeRes.Message = "Insert TXT File Data Success!";
exeRes.State = true;
}
catch (Exception ex)
{
transaction.Rollback();
exeRes.Message = "Insert TXT File Data Fail!"+ex.Message;
exeRes.State = false;
}

return exeRes;

}
#endregion
...全文
229 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangpengyu 2010-08-26
  • 打赏
  • 举报
回复
按照5#已经解决问题
fangpengyu 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangyangmao 的回复:]
插入参数了,我连接ORACLE测试是OK的,但是SQL SERVER2005报错,只能插入一条记录
[/Quote]

按照你的做法现在已经OK,但是还是不太明白意思,能否讲的更详细点,谢谢!
rwm5366745 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 k0mmdu 的回复:]
C# code
if (count > 0)
{
command.CommandText = sql;
command.Parameters.Add("@COMPALPN", System.Data.SqlDbType.NVarChar);
co……
[/Quote]
+1
k0mmDu 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangyangmao 的回复:]

插入参数了,我连接ORACLE测试是OK的,但是SQL SERVER2005报错,只能插入一条记录
[/Quote]
你一条commad中有3个参数,然后循环中每次都插入3个参数,所以只有第一次是对的么,Parameters.Add应该在循环外面,循环中改为只改变参数的值.
或者每次循环都new一个command
k0mmDu 2010-08-26
  • 打赏
  • 举报
回复
            if (count > 0)
{
command.CommandText = sql;
command.Parameters.Add("@COMPALPN", System.Data.SqlDbType.NVarChar);
command.Parameters.Add("@CUSTPN", System.Data.SqlDbType.NVarChar);
command.Parameters.Add("@SKU", System.Data.SqlDbType.NVarChar);
for (int i = 0; i <= count - 1; i++)//减一是把第一行标题去掉
{
string ss = dt.Rows[i][0].ToString();
string ff = dt.Rows[i][1].ToString();
string dd = dt.Rows[i][2].ToString();
command.Parameters["@COMPALPN"].Value = ss;
command.Parameters["@CUSTPN"].Value = ff;
command.Parameters["SKU"].Value = dd;
command.ExecuteNonQuery();
}
}

随便写下没调试过
另外似乎你connection没有open()么
fangpengyu 2010-08-26
  • 打赏
  • 举报
回复
插入参数了,我连接ORACLE测试是OK的,但是SQL SERVER2005报错,只能插入一条记录
k0mmDu 2010-08-26
  • 打赏
  • 举报
回复
                    for (int i = 0; i <= count-1; i++)//减一是把第一行标题去掉
{
string ss = dt.Rows[i][0].ToString();
string ff = dt.Rows[i][1].ToString();
string dd = dt.Rows[i][2].ToString();
command.Parameters.AddWithValue("@COMPALPN", dt.Rows[i][0].ToString());
command.Parameters.AddWithValue("@CUSTPN", dt.Rows[i][1].ToString());
command.Parameters.AddWithValue("@SKU", dt.Rows[i][2].ToString());
command.ExecuteNonQuery();
}

这里你循环插入参数了
q107770540 2010-08-26
  • 打赏
  • 举报
回复
单步调试查看得到的SQL语句是否正确
放在查询分析器中编译一下

110,500

社区成员

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

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

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