SQL - MVC - 插入2个表

时间:2013-09-06 13:53:53

标签: mysql sql sql-server asp.net-mvc

我在mvc中工作并使用sql命令将数据插入到我的 数据库中。

我尝试做的是插入2个表中的哪一个 从另一方获得外键。

如何构建我的SQL查询以在插入上创建条件 进入表格Image,在外键列中插入id 在表格内容中。

 using (SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
            {
    SqlCommand cmd;
    System.Text.StringBuilder sql = new System.Text.StringBuilder();
    sql.Append("insert into Image(FileName)");
    sql.Append("values (@FileName)");

    SqlCommand cmd2;
    System.Text.StringBuilder sql2 = new System.Text.StringBuilder();
    sql.Append("insert into Code(Html,JsCode,Id_Img)");
    sql.Append("values (@Html, @JsCode, @Id_Img)");

    cn.Open();
    cmd = new SqlCommand(sql.ToString(), cn);
    cmd.Parameters.Add("@FileName", SqlDbType.VarChar).Value = myfilename;
    int FileId = (int)cmd.ExecuteScalar();

    cmd2 = new SqlCommand(sql2.ToString(), cn);
    cmd2.Parameters.Add("@Html", SqlDbType.VarChar).Value = mydiv;
    cmd2.Parameters.Add("@JsCode", SqlDbType.VarChar).Value = DBNull.Value;
    cmd2.Parameters.Add("@Id_Img", SqlDbType.Int).Value = FileId;
    cmd2.ExecuteNonQuery();
 cn.Close();
 }

1 个答案:

答案 0 :(得分:1)

我认为您可以使用ExecuteScalar()代替ExecuteNonQuery()从服务器获取Scope_identity()值,如下所示,并将该FileId添加到第二个查询中。

using (SqlConnection cn = new SqlConnection("your_connection_string"))
{
    string sql1 = "insert into Image(FileName) values (@FileName); " +
                  "SELECT CAST(scope_identity() AS int)"; 

    string sql2 = "insert into Code(Html,JsCode,Id_Img) values (@Html, @JsCode, @Id_Img)";  

    int FileId = 0;

    using (SqlCommand cmd = new SqlCommand(sql1,cn))
    {
         cmd.Parameters.AddWithValue("@fileName", myfilename);
         cn.Open();
         FileId= (int)cmd.ExecuteScalar();
    }

}