問題

2011-06-30 12 views
1
public static void DeleteThreads(int threadID) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("DELETE FROM dbo.Threads"); 
    sb.Append(" WHERE [email protected]"); 

    string myConnectionString = AllQuestionsPresented.connectionString; 

    using (SqlConnection myConnection = new SqlConnection(myConnectionString)) 
    { 
     myConnection.Open(); 
     SqlCommand sqlCommand = new SqlCommand(sb.ToString(), myConnection); 
     sqlCommand.Parameters.Add("@ThreadsID", SqlDbType.Int); 
     sqlCommand.Parameters["@ThreadsID"].Value = threadID; 
     sqlCommand.ExecuteNonQuery(); 

    } 
} 

は、それは私にこのエラーを与える:問題

The DELETE statement conflicted with the REFERENCE constraint "FK_Comments_Threads". The conflict occurred in database "model", table "dbo.Comments", column 'ThreadsID'. 

文は終了しました。

これがそのエラーを修正する必要があります

enter code here public static void DeleteComments(int threadID) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("DELETE FROM dbo.Comments"); 
    sb.Append(" WHERE [email protected]"); 

    string myConnectionString = AllQuestionsPresented.connectionString; 

    using (SqlConnection myConnection = new SqlConnection(myConnectionString)) 
    { 
     myConnection.Open(); 
     SqlCommand sqlCommand = new SqlCommand(sb.ToString(), myConnection); 
     sqlCommand.Parameters.Add("@ThreadsID", SqlDbType.Int); 
     sqlCommand.Parameters["@ThreadsID"].Value = threadID; 
     sqlCommand.ExecuteNonQuery(); 

    } 
} 
+0

どのDBMSを使用していますか? –

+1

"dbo.Threads"と "WHERE"の間に空白がありませんか? – Jacob

+0

すべて質問が更新されました –

答えて

3

あなたは、スペースを持っていない、とあなたはFROMキーワードが欠落しているように見えます。

試してみてください。また

sb.Append("DELETE FROM dbo.Threads");  
sb.Append(" WHERE [email protected]"); 

、レコードの:インラインSQLを使用することにより、しっかりと自分のデータベースにアプリケーションを結合し、一般的に悪いです。このアプリケーションが深刻な目的のために存在する場合は、別のデータアクセスレイヤーを使用する必要があります。

+0

FROMは不要ですが、キーワードと識別子の間にスペースがあります。 –

+0

回答を更新しました –

+0

@ypercube - 十分に公正です。私はいつも "FROM"を使用していたので、いつかはオプションではないと自分自身で確信していたに違いありません。 –

0

それは

DELETE FROM ...... 
+0

単語から使用されないコードをいくつか見ました。 –

2

含めることなら "から" 宇宙

StringBuilder sb = new StringBuilder(); 
     sb.Append("DELETE from dbo.Threads "); 
     sb.Append("WHERE [email protected]"); 
2

最初の文の後にスペースを与え、忘れることを忘れFROM thatsを追加します。

StringBuilder sb = new StringBuilder(); 
sb.Append("DELETE FROM dbo.Threads "); 
sb.Append(" WHERE [email protected]"); 
+0

彼はすでにパラメータを使用しています。 –

+0

あなたは 'FROM'キーワードを見逃しました。 –

+0

ちょっと前に2分戻ってきましたが、私も答えがハイライトされました –

2

文字列を自分で作成して、何が間違っているかを確認してください。あなたがFROMキーワードとdbo.Threads後のスペースが不足している

DELETE dbo.ThreadsWHERE [email protected] 

結果は次のようになります。

sb.Append("DELETE FROM dbo.Threads ");  
sb.Append("WHERE [email protected]"); 
0

スレッドIDはコメントや他のテーブルでforign keyとして渡されます。そのスレッドIDに最初に関連付けられたレコードを削除する必要があります。 SQL Server Management Stidioからマスターテーブルに対してカスケード削除オプションを設定できます。