我的代码如下:SqlDataAdapter sda = new SqlDataAdapter();
sda.InsertCommand = new SqlCommand("addcj_dail_record",con);
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
SqlParameter par = new SqlParameter("@car_h",SqlDbType.NVarChar);
par.Value = car_h;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@cpxh",SqlDbType.NVarChar);
par.Value = cpxh;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@uptime", SqlDbType.DateTime);
par.Value =uptime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@downtime", SqlDbType.DateTime);
par.Value = downtime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@danjia", SqlDbType.NVarChar);
par.Value = danjia;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@denghou", SqlDbType.Int);
par.Value = denghou;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@gsmc", SqlDbType.NVarChar);
par.Value = gsmc;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@id", SqlDbType.NVarChar);
par.Value = id;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@xingcheng", SqlDbType.Float);
par.Value = xingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@yingcheng", SqlDbType.Float);
par.Value = yingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@jine", SqlDbType.Float);
par.Value = jine;
sda.InsertCommand.Parameters.Add(par);
sda.InsertCommand.ExecuteNonQuery();
sda.Dispose();
con.Close();
return true;
我的程序是用for循环来执行这段代码的,当执行到90-110条之间,运行到sda.InsertCommand.ExecuteNonQuery();
sda.Dispose();
con.Close();
这三句其中的一句的时候,调试按钮变成灰色,无法继续调试。界面也不动了,也不往数据库中插入数据了。
之所以写90-110,还有后面的三句代码,是因为随机停止的。请各位高手帮帮忙,看看是怎么回事。
先到先解决的,给多分
sda.InsertCommand = new SqlCommand("addcj_dail_record",con);
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
SqlParameter par = new SqlParameter("@car_h",SqlDbType.NVarChar);
par.Value = car_h;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@cpxh",SqlDbType.NVarChar);
par.Value = cpxh;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@uptime", SqlDbType.DateTime);
par.Value =uptime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@downtime", SqlDbType.DateTime);
par.Value = downtime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@danjia", SqlDbType.NVarChar);
par.Value = danjia;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@denghou", SqlDbType.Int);
par.Value = denghou;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@gsmc", SqlDbType.NVarChar);
par.Value = gsmc;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@id", SqlDbType.NVarChar);
par.Value = id;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@xingcheng", SqlDbType.Float);
par.Value = xingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@yingcheng", SqlDbType.Float);
par.Value = yingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@jine", SqlDbType.Float);
par.Value = jine;
sda.InsertCommand.Parameters.Add(par);
sda.InsertCommand.ExecuteNonQuery();
sda.Dispose();
con.Close();
return true;
我的程序是用for循环来执行这段代码的,当执行到90-110条之间,运行到sda.InsertCommand.ExecuteNonQuery();
sda.Dispose();
con.Close();
这三句其中的一句的时候,调试按钮变成灰色,无法继续调试。界面也不动了,也不往数据库中插入数据了。
之所以写90-110,还有后面的三句代码,是因为随机停止的。请各位高手帮帮忙,看看是怎么回事。
先到先解决的,给多分
sda.InsertCommand = new SqlCommand("addcj_dail_record",con);
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
for(int i=0;i<...;i++)//假设有多条数据
{
sda.InsertCommand.Parameters.Clear();//清除以前的参数设置
SqlParameter par = new SqlParameter("@car_h",SqlDbType.NVarChar);
par.Value = car_h;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@cpxh",SqlDbType.NVarChar);
par.Value = cpxh;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@uptime", SqlDbType.DateTime);
par.Value =uptime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@downtime", SqlDbType.DateTime);
par.Value = downtime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@danjia", SqlDbType.NVarChar);
par.Value = danjia;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@denghou", SqlDbType.Int);
par.Value = denghou;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@gsmc", SqlDbType.NVarChar);
par.Value = gsmc;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@id", SqlDbType.NVarChar);
par.Value = id;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@xingcheng", SqlDbType.Float);
par.Value = xingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@yingcheng", SqlDbType.Float);
par.Value = yingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@jine", SqlDbType.Float);
par.Value = jine;
sda.InsertCommand.Parameters.Add(par); }
sda.Dispose();
con.Close();
return true;
如果要同时插入多条记录,可以在开始插入之前初始化数据库相关对象,打开连接,然后依次将多条数据写入,最后关闭数据库连接,释放对象,这样效率高。
sda.InsertCommand = new SqlCommand("addcj_dail_record",con);
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
for(int i=0;i<...;i++)//假设有多条数据
{
sda.InsertCommand.Parameters.Clear();//清除以前的参数设置
SqlParameter par = new SqlParameter("@car_h",SqlDbType.NVarChar);
par.Value = car_h;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@cpxh",SqlDbType.NVarChar);
par.Value = cpxh;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@uptime", SqlDbType.DateTime);
par.Value =uptime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@downtime", SqlDbType.DateTime);
par.Value = downtime;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@danjia", SqlDbType.NVarChar);
par.Value = danjia;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@denghou", SqlDbType.Int);
par.Value = denghou;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@gsmc", SqlDbType.NVarChar);
par.Value = gsmc;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@id", SqlDbType.NVarChar);
par.Value = id;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@xingcheng", SqlDbType.Float);
par.Value = xingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@yingcheng", SqlDbType.Float);
par.Value = yingcheng;
sda.InsertCommand.Parameters.Add(par);
par = new SqlParameter("@jine", SqlDbType.Float);
par.Value = jine;
sda.InsertCommand.Parameters.Add(par); }
sda.Dispose();
con.Close();
return true; OK!!!!!!!!!!!!!!!!!
2 sda.InsertCommand.Parameters 集合是否有限制解决方法探索有3:
1 排除法:每条记录不要一次插那么多字段值,从1~n逐步增加参数个数,看是不是某个字段的值有问题
2 在存储过程返回个值表示插入是否成功,如失败就返回个错误提示,否则返回空字符串
3 换种方法,用IDbDataParameter 试试,我们一直用这个,举例
IDbConnection connection = new SqlConnection("sqlstring");
IDbCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "yourProcedure";
//构造调用存储过程的参数
List<IDbDataParameter> dbDataParameters = new List<IDbDataParameter>();
IDbDataParameter dbDataParameter1 = businessObj.CreateDbDataParameter();//输入参数
dbDataParameter1.ParameterName = "strSgin";
dbDataParameter1.DbType = DbType.String;
dbDataParameter1.Value = signser;
dbDataParameter1.Direction = ParameterDirection.Input;
dbDataParameters.Add(dbDataParameter1); IDbDataParameter dbDataParameter2 = businessObj.CreateDbDataParameter();//输入参数
dbDataParameter2.ParameterName = "v_lotno";
dbDataParameter2.DbType = DbType.String;
dbDataParameter2.Value = lotno;
dbDataParameter2.Direction = ParameterDirection.Input;
dbDataParameters.Add(dbDataParameter2); IDbDataParameter dbDataParameter3 = businessObj.CreateDbDataParameter();//输出参数:错误信息
dbDataParameter3.ParameterName = "errmsg";
dbDataParameter3.DbType = DbType.String;
dbDataParameter3.Size = 100;//大小
dbDataParameter3.Direction = ParameterDirection.Output;
dbDataParameters.Add(dbDataParameter3);
...
//执行
object result = command.ExecuteNonQuery(); //判断 result 的值
if (!string.IsEmptyOrNul(result)) //抛异常
int result = command.ExecuteNonQuery(); //判断 result 的值
if (result <= 0) //抛异常