2017-10-05 57 views
0

我无法发送已插入的自动增量id值到另一个表 这是我的代码 我得到的错误是必须声明标量变量“@userid”。一对多关系数据发送

int ID; 

    SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["samplefkConnectionString"].ConnectionString); 

    SqlCommand cmd = new SqlCommand("insert into sampdb values(@name,@phone);"+ "Select Scope_Identity()", cn); 

    cmd.Parameters.AddWithValue("@name", TextBox1.Text); 
    cmd.Parameters.AddWithValue("@phone", TextBox2.Text); 



    cn.Open(); 

    cmd.ExecuteNonQuery(); 
    ID = Convert.ToInt32(cmd.ExecuteScalar()); 

    cn.Close(); 
    TextBox1.Text = ""; 
    TextBox2.Text = ""; 
    SqlCommand cmd2 = new SqlCommand("insert into sampfk values(@emailid,@address,@userid)", cn); 


    cmd2.Parameters.AddWithValue("@emailid", TextBox3.Text); 
    cmd2.Parameters.AddWithValue("@address", TextBox4.Text); 
    cmd2.Parameters.AddWithValue("@userid", ID); 
    cn.Open(); 
    cmd2.ExecuteNonQuery(); 

    cn.Close(); 
    cmd.Dispose(); 
    TextBox3.Text = ""; 
    TextBox4.Text = ""; 
+0

你得到的价值? –

+0

是的,我得到了价值ID – sandeep

回答

0

您可以在单步以上做,你应该使用using更多,如果可能的话尽量嵌套查询。经常打开TCP连接有一些确认开销。

 using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["samplefkConnectionString"].ConnectionString)) 
     { 
      string query = @"INSERT INTO sampdb VALUES (@name,@phone); 
          INSERT INTO sampfk VALUES (SCOPE_IDENITTY(), @address, @emailid); "; 
      using (SqlCommand cmd = new SqlCommand(query, cn)) 
      { 
       cmd.Parameters.AddWithValue("@name", TextBox1.Text); 
       cmd.Parameters.AddWithValue("@phone", TextBox2.Text); 
       cmd.Parameters.AddWithValue("@emailid", TextBox3.Text); 
       cmd.Parameters.AddWithValue("@address", TextBox4.Text); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
0

检查以下行。

ID = Convert.ToInt32(cmd.ExecuteScalar()); 

如果不返回任何内容,则使用默认值ID,也许0

或者在声明中加入一个默认值int id = 0;

+0

得到了一个错误必须声明标量变量“@emailid”。 – sandeep

1

我想我明白你的问题。你已经写

SqlCommand cmd2 = new SqlCommand("insert into sampfk values (@userid, @address, @emailid)", cn); 
cmd.Parameters.AddWithValue("@userid", ID); 
cmd.Parameters.AddWithValue("@emailid", TextBox3.Text); 
cmd.Parameters.AddWithValue("@address", TextBox4.Text) 

但执行

cmd2.ExecuteNonQuery(); 

你应该CMD2添加参数不是在cmd等作为

cmd2.Parameters.AddWithValue("@userid", ID); 
    cmd2.Parameters.AddWithValue("@emailid", TextBox3.Text); 
    cmd2.Parameters.AddWithValue("@address", TextBox4.Text) 
0

尝试在 “sampdb” 表插入后,在 “ID” 变量此

using (SqlConnection cn = new SqlConnection(connectionStr)) 
{ 
    string sql1 = "insert into sampdb values(@name,@phone);"+ "Select Scope_Identity()"; 
    using (SqlCommand cmd = new SqlCommand(sql1, cn)) 
    { 
    cmd.Parameters.AddWithValue("@name", TextBox1.Text); 
    cmd.Parameters.AddWithValue("@phone", TextBox2.Text); 
    cn.Open(); 
    ID = cmd.ExecuteNonQuery(); 
    } 
    //ID = Convert.ToInt32(cmd.ExecuteScalar()); 
    cn.Close(); 
    TextBox1.Text = ""; 
    TextBox2.Text = ""; 
    string sql2 = "insert into sampfk values (@userid, @address, @emailid)"; 
    using (SqlCommand cmd = new SqlCommand(sql2, cn)) 
    { 
    cmd.Parameters.AddWithValue("@userid", ID); 
    cmd.Parameters.AddWithValue("@emailid", TextBox3.Text); 
    cmd.Parameters.AddWithValue("@address", TextBox4.Text); 
    cn.Open(); 
    cmd.ExecuteNonQuery(); 
    } 
    con.Dispose(); 
    con.Close(); 
} 
+0

我通过更新我的代码得到它谢谢你的答案 – sandeep

+0

请标记为答案..谢谢 – Saif