2017-08-04 70 views
0

我在C#中执行两个查询时遇到问题。当我尝试执行第二,它给了我下面的消息:如何在C#中一次执行两个查询?

列“FIRST_NAME”不能为空

...这是指以前成功执行我的第一个查询。我想第二个查询中仍然有这个列名称,即使我没有在这里使用它。你可以看到,我创建了一个新的StringBuilder对象,并清除了第二个查询的参数,但不知何故我仍然收到了这条消息。

 // Executed first query. Now moving onto second query without calling .Close() 

     // Store the last inserted id as the child's local id 
     child.ID = cmd.LastInsertedId; 

     // Store the child id into the parent record 
     query = new StringBuilder(); 
     cmd.Parameters.Clear(); 

     query.Append("UPDATE players SET child_id = @child_id WHERE player_id = @player_id;"); 

     cmd.Parameters.AddWithValue("child_id", child.ID); 
     cmd.Parameters.AddWithValue("player_id", child.ParentID); 

     // Execute query 
     rows_affected = cmd.ExecuteNonQuery(); 

     conn.Close(); 
+0

您的第一个查询似乎引发error.Are确定,您的第一个查询成功执行? –

回答

1

看起来您并未将CommandText属性设置为您的新查询。您仍然使用第二个参数执行第一个查询。

// Executed first query. Now moving onto second query without calling .Close() 

    // Store the last inserted id as the child's local id 
    child.ID = cmd.LastInsertedId; 

    // Store the child id into the parent record 
    query = new StringBuilder(); 
    cmd.Parameters.Clear(); 

    query.Append("UPDATE players SET child_id = @child_id WHERE player_id = @player_id;"); 

    //*** ADD THIS LINE HERE ***// 
    cmd.CommandText = query.ToString(); 

    cmd.Parameters.AddWithValue("child_id", child.ID); 
    cmd.Parameters.AddWithValue("player_id", child.ParentID); 

    // Execute query 
    rows_affected = cmd.ExecuteNonQuery(); 

    conn.Close(); 
+0

谢谢,将它分配给cmd.CommandText做了诀窍。 – Phil