【问题标题】:SQL - MVC - Insert into 2 tablesSQL - MVC - 插入 2 个表
【发布时间】:2013-09-06 13:53:52
【问题描述】:

我在 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();
 }

【问题讨论】:

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


    【解决方案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();
        }
    
    }
    

    【讨论】:

    • 我已经尝试过了,但我现在收到此错误:对象引用未设置为对象的实例。
    • 你在哪里设置连接?你能检查你的 cn 对象吗?
    • Kaf 现在可以工作了.. 完美!!!我已经在 sql1 字符串中使用 Select Cast 等进行了尝试,现在它可以正常工作了。非常感谢你。如果可以的话,我会给你超过 +1 。谢谢
    • 我认为原因是ExcuteScalar() returns the first column of the first row in the result set, or a null reference if the result set is empty。因为你没有那个 Select query after the insert 它返回 null...,祝你好运!
    • scope_identity() 存在一些潜在问题,这些问题在 MSDN 上有详细记录。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多