保存的代码太多,还可以优化吗

zhengyingcan 2009-07-02 09:32:33
如下是我写的最简洁的保存代码了,感觉还是太长了,还可以再优化一点吧,感觉以前用ADO的话,代码要少得多.
//保存主表
SqlParameter[] parameter = {new SqlParameter("@客户名称",SqlDbType.VarChar,20),
new SqlParameter("@版次",SqlDbType.VarChar,20),
new SqlParameter("@日期",SqlDbType.DateTime,20),
new SqlParameter("@变更编号",SqlDbType.VarChar,20),
new SqlParameter("@核准",SqlDbType.VarChar,10),
new SqlParameter("@审核",SqlDbType.VarChar,10),
new SqlParameter("@制表",SqlDbType.VarChar,10),
new SqlParameter("@客户型号",SqlDbType.VarChar,20),
new SqlParameter("@图号",SqlDbType.VarChar,20),
new SqlParameter("@品名",SqlDbType.VarChar,20),
new SqlParameter("@成品料号",SqlDbType.VarChar,20),
new SqlParameter("@remark",SqlDbType.VarChar,200),
new SqlParameter("@成品描述",SqlDbType.VarChar,250),
new SqlParameter("@autoid",SqlDbType.Int)
};
//给各参数赋值
parameter[0].Value = 客户名称.Text;
parameter[1].Value = cs1;
parameter[2].Value = DateTime.Today;
parameter[3].Value = 变更编号.Text;
parameter[4].Value = 核准.Text;
parameter[5].Value = 审核.Text;
parameter[6].Value = 制表.Text;
parameter[7].Value = 客户型号.Text;
parameter[8].Value = 图号.Text;
parameter[9].Value = 品名.Text;
parameter[10].Value = 成品料号.Text;
parameter[11].Value = remark.Text;
parameter[12].Value = 成品描述.Text;
parameter[13].Value = autoid;
//添加SQL语句
string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " +
"values(@客户名称,@版次,@日期,@变更编号,@核准,@审核,@制表,@客户型号,@图号,@品名,@成品料号,@remark,@成品描述,@autoid)";
SqlCommand cmd = new SqlCommand(strsql, cna);
//赋给SQL语句各参数值
foreach (var item in parameter)
{
cmd.Parameters.Add(item);
}
cna.Open();
//执行查询
cmd.ExecuteNonQuery();
cna.Close();
MessageBox.Show("保存成功");
...全文
75 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nightmarewhc 2009-07-02
  • 打赏
  • 举报
回复

貌似验证是不能省的吧....至少调之前要验证的啊
ztenv 2009-07-02
  • 打赏
  • 举报
回复
建议把这些交给存储过程来做,直接调用存储过程就行了;
zhengyingcan 2009-07-02
  • 打赏
  • 举报
回复
我也想省,就怕 客户名称.Text 有的时候为空,
Nightmarewhc 2009-07-02
  • 打赏
  • 举报
回复
如果想省的话就这样
string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " +
"values('"+客户名称.Text+"'......)";

//后面以此类推这样加就可以了,不用加那个SqlParameter

SqlCommand cmd = new SqlCommand(strsql, cna);
//赋给SQL语句各参数值
foreach (var item in parameter)
{
cmd.Parameters.Add(item);
}
cna.Open();
//执行查询
cmd.ExecuteNonQuery();
cna.Close();
MessageBox.Show("保存成功");
zgke 2009-07-02
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand(strsql, cna);
//赋给SQL语句各参数值
foreach (var item in parameter)
{
cmd.Parameters.Add(item);
} /////

cmd.Parameters.AddRange(new SqlParameter[]{
???,
???,
});

cmd.Parameters[0].Value ="123";


cmd.Parameters.
zhengyingcan 2009-07-02
  • 打赏
  • 举报
回复
那也跟没有省一样,不过相信速度是快了
c02645 2009-07-02
  • 打赏
  • 举报
回复
public static int ExecuteNonQuery(string sql, ArrayList arr)
{
OleDbConnection conn = getConn();
conn.Open();
OleDbCommand comm = new OleDbCommand(sql, conn);
if (arr != null)
{
for (int i = 0; i < arr.Count; i++)
{
object[] obj = (object[])arr[i];
OleDbParameter odp = new OleDbParameter(obj[0].ToString(), obj[1]);
comm.Parameters.Add(odp);
}
}
int n = 0;
try
{
n = comm.ExecuteNonQuery();
}
catch (Exception e) { MessageBox.Show(e.Message); }
conn.Close();
return n;
}

看看这个,

string sql="insert into (id)values(@id)";

ArrayList arr=new ArrayList();
arr.Add(New Object[]{"id",5});
ExecuteNonQuery(sql,arr);
Nightmarewhc 2009-07-02
  • 打赏
  • 举报
回复
SQL语句可以换成执行存储过程,
string strsql = "insert into BOM主表(客户名称,版次,日期,变更编号,核准,审核,制表,客户型号,图号,品名,成品料号,备注,成品描述,autoid) " +
"values(@客户名称,@版次,@日期,@变更编号,@核准,@审核,@制表,@客户型号,@图号,@品名,@成品料号,@remark,@成品描述,@autoid)";
都可以省略了,直接写个存储过程名称,设置下COMMAND的执行存储过程即可

110,539

社区成员

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

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

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