2016-07-09 12 views
0

SQLを習得していて、クエリに問題があります。私は2つのテーブルのカレンダーとアクティビティとFKテーブルのDateActivitiesを持っています。日付と活動のある2つのシンプルリストカレンダーを手に入れました。私はボタンをクリックして、選択された日付のテキストボックスを通して新しい活動を入力することができるようにしたい。しかし、私がそれをすると、私は質問にエラーを起こします。ご協力いただきありがとうございます。SQLクエリの実行順序エラー

private void btnAddToDate_Click(object sender, EventArgs e) 
    { 
     string query = "DECLARE @ActivitiesId TABLE (Id INT) " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName) " + 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)"; 

     using (connection = new SqlConnection(connectionString)) 
     using (SqlCommand command = new SqlCommand(query, connection)) 
     { 
      connection.Open(); 
      command.Parameters.AddWithValue("@ActivitiesName", textDate.Text); 
      command.Parameters.AddWithValue("@CalendarId", listCalendar.SelectedValue); 
      command.ExecuteNonQuery(); 
     } 

     FillCalendar(); 
     FillActivities(); 
    } 
+2

入れトライあなたのコードに-catchブロックを置き、ここに例外を貼り付けてください。あなたの心を読むことはできません。 –

答えて

1

あなたは、複数のステートメントを実行するので、それが実行するための単一の文として扱われます他に以下のような行終端として;でそれらを分離するために必要しようとしています。 SSMSで文ブロックをコピー/ペーストするだけで同じエラーが発生します。

"DECLARE @ActivitiesId TABLE (Id INT); " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName); " + 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)" 

アドホッククエリとして実行する代わりに、これをストアドプロシージャにプッシュする方がよいでしょう。

0

あなたは明らかに間違っていると失敗しますDateActivitiesの列の値でテーブル全体を挿入している、あなたはActivityIdを保持し、次のそれを挿入し、以下を参照して別の変数を使用する必要があります。

"DECLARE @ActivitiesId TABLE (Id INT) 
DECLARE @ActivityId INT " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName) " + 
         "SELECT @ActivityId = Id from @ActivitiesId" 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivityId)";