当我们写数据库操作的时候,第次都只写一句SQL,能不能同时写两句呢?
例如:
string cmdstr="insert into table (id) values('1');update table set id=2";
SqlConnection cnn="server=(local)....";
SqlCommand cmd=new SqlCommand(cmdstr,cnn);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();

解决方案 »

  1.   

    如果有多条语句在SqlCommand中执行,那么ExecuteNonQuery返回的是最后一条语句执行所影响的记录条数,如果这种多条语句的情况较多,最好写到一个存储过程中.
      

  2.   

    写存储过程吧,想写多少条就可以
    然后用DATASET全收,有多少条查询记录就有多少个table
      

  3.   

    string cmdstr="insert into table (id) values('1');update table set id=2;insert into table (id) values('1');update table set id=2";
    这样也可以,SQL语句后面加上;
      

  4.   

    这样写好点
    SqlConnection cnn="server=(local)....";
    SqlCommand cmd=new SqlCommand();
    cnn.Open();
    cmd.connection=con;
    cmd.commandtext="insert into table (id) values('1')";
    cmd.ExecuteNonQuery();
    cmd.comandtext="update table set id=2";
    cmd.ExecuteNonQuery();
    cnn.Close();
      

  5.   

    //insert
    public void oiSave()
    {
    OleDbConnection con = DBConnection.createCon();
    con.Open();
    OleDbCommand cmd = new OleDbCommand("",con);
    cmd.CommandText += "insert into OutIn values(@No,@ProNo,@Type,@Count,@Leavings,@Price,@Time,@Location,@DoNo)";
    cmd.Parameters.Add("@No",this.No);
    cmd.Parameters.Add("@ProNo",this.ProNo);
    cmd.Parameters.Add("@Type",this.Type);
    cmd.Parameters.Add("@Count",this.Count);
    cmd.Parameters.Add("@Leavings",this.Count);
    cmd.Parameters.Add("@Price",this.Price);
    cmd.Parameters.Add("@Time",this.Time);
    cmd.Parameters.Add("@Location",this.Location);
    cmd.Parameters.Add("@DoNo",this.DoNo);
    OleDbTransaction odt = con.BeginTransaction();
    cmd.Transaction = odt;
    try
    {
    if(this.Type=="入库")
    {
    cmd.ExecuteNonQuery();
    cmd.CommandText = "update Products set ProCount=ProCount+"+this.Count+" where ProNo='"+this.ProNo+"'";
    cmd.ExecuteNonQuery();
    odt.Commit();
    }
    else if(this.Type=="出库")
    {
    cmd.ExecuteNonQuery();
    cmd.CommandText = "update OutIn set Leavings=Leavings-"+this.Count+" where No='"+this.DoNo+"'";
    cmd.ExecuteNonQuery();
    cmd.CommandText = "update Products set ProCount=ProCount-"+this.Count+" where ProNo='"+this.ProNo+"'";
    cmd.ExecuteNonQuery();
    odt.Commit();
    }
    }
    catch(OleDbException ex)
    {
    odt.Rollback();
    throw ex;
    }
    finally
    {
    con.Close();
    }
    }
      

  6.   

    把他们收集在一起,以一条SQL批命令提交,这比单个提交要执行快很多倍。如果你就是直接面向数据库编程,应当这样写。不这样的原因通常是因为一个人可能有很高级的抽象系统,那么系统不支持这种优化。
      

  7.   

    如果你有许多insert连续执行,每300个insert语句组合成一个SQL,执行一次ExecuteNonQuery();这样的做法从数据库操纵方面来看是很好的。当然,我说过了,不这样做也有一定的原因。当一个人它的系统很高级的时候,可能一时不能允许这种硬编码得来的优化。如果不是因为这个原因,就应该把SQL尽量组合在一起才执行。