2016-04-04 11 views
-1

私の要求は正常に挿入されました。最後の増分IDをルートフォルダファイルname.idにバインドしたいのですが、SQLで自動的に増分されました。私はその大胆な部分の場所に最後に増分IDをバインドしたい。単一クエリを使用してSQLで最終増分IDを取得する方法

これは、この問題を解決するために私を助けてください私のコードです:

string insert = "insert into Articles values('" + html+ "','" + text + "')"; 

try 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(insert, con); 

    int i = cmd.ExecuteNonQuery(); 

    if (i > 0) 
    { 
     using (StreamWriter file = new StreamWriter(System.Web.Hosting.HostingEnvironment.MapPath(@"~\Articles\**ID**.html"), true)) 
     { 
      file.WriteLine(value.editor); // Write the file. 
     } 

     return msg; 
    } 
    else 
    { 
     return msg1; 
    } 
} 
catch (Exception ex) 
{ 
} 
finally 
{ 
    con.Close(); 
} 
+4

あなたが、読ん理解し、パラメータ化クエリを使用する必要が何かを行う前に。このコードはSQLインジェクションに対して脆弱です。 C#のUSING文についても読んで、その中に接続をラップする必要があります。また、あなたは空のキャッチがあります。これは信じられないほど悪いことです。何かがうまくいかないと、あなたはそれを知ることさえできません。私はこの反パターンを「試練」と呼んでいます。 –

+0

'text'変数にこの値が含まれているとどうなりますか?ドロップテーブルの記事; - ' –

+0

あなたは'増分id'をどういう意味ですか?挿入が行われているテーブルの 'îdentity'カラムを参照している場合は、' Articles'テーブルのDDLをあなたの質問に含めることができます。それでも、次の投稿はあなたの質問に役立つ/関連性があるかもしれません:http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide – Ralph

答えて

5

Sean Langeは当然のコメントで書いたように、それはsql injection攻撃に対して脆弱だとして、あなたのコードは、セキュリティ上のリスクであることに注意してください。 また、彼が指摘したように、空のキャッチが問題です。自分自身に恩恵を与えて、決して空のキャッチブロックを使用しないでください。

現在のセッションで最後に生成されたID値を取得するには、Sql ServerのSCOPE_IDENTITY()関数を使用する必要があります。
テーブルに挿入トリガーの代わりにSCOPE_IDENTITY()がある場合は、ではなく、に正しい値を指定してください。

あなたのコードは次のようになります。

string insert = "insert into Articles values(@html, @text); select scope_identity()"; 

using (var con = new SqlConnection("<YOUR CONNECTION STRING HERE>")) 
{ 
    using (var cmd = new SqlCommand(insert, con)) 
    { 
     cmd.Parameters.Add("@html", SqlDbType.NVarChar).Value = html; 
     cmd.Parameters.Add("@text", SqlDbType.NVarChar).Value = text; 
     try 
     { 
      con.Open(); 
      var databaseId = cmd.ExecuteScalar(); 
      if (databaseId is int) 
      { 
       using (StreamWriter file = new StreamWriter(System.Web.Hosting.HostingEnvironment.MapPath(string.Format(@"~\Articles\{0}.html", databaseId)), true)) 
       { 
        file.WriteLine(value.editor); // Write the file. 
       } 
       return msg; 
      } 
      else 
      { 
       return msg1; 
      } 
     } 
     catch (Exception ex) 
     { 
      // Write to log, show an error message to the user        
     } 
    } 
} 
関連する問題