2016-10-16 13 views
0

SUPPLIERNAMEという列のSQL ServerデータベースにテーブルSupplierMasterがあります。SQL Serverデータベース内の既存のデータを編集する

は、私は以下のクエリ

ALTER PROCEDURE [dbo].[usp_SupplierMasterUpdateDetails] 
(
    @SUPPLIERNAME NVARCHAR(50) 
) 
AS 
BEGIN 
    UPDATE [dbo].[SupplierMaster] 
    SET [SUPPLIERNAME] = @SUPPLIERNAME 
    WHERE [SUPPLIERNAME] = @SUPPLIERNAME 
END 

でストアドプロシージャを使用して保存したサプライヤの名前を編集したいと私は、データを更新するには、「更新ボタン」を通じて以下のコードを実行します。

string connString = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString; 

using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    using (SqlCommand cmd = new SqlCommand("usp_SupplierMasterUpdateDetails", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     // Parameter 
     cmd.Parameters.AddWithValue("SUPPLIERNAME", AddSupplierTextBox.Text); 

     // Open Connection 
     conn.Open(); 

     // ExecuteReader (Select Statement) 
     // ExecuteScalar (Select Statement) 
     // ExecuteNonQuery (Insert, Update or Delete) 
     cmd.ExecuteNonQuery(); 

     MessageBox.Show("SUCCESSFULLY UPDATED", "Successful", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
} 

ただし、選択したデータは更新されません。

適切な作業のためにコードを修正するよう助言し、助けてください。

+0

errormessage? – nozzleman

+0

いいえ......更新ボタンを押したときにコードが実行されていません。msgも正常に更新されましたが、データベースのデータは変更されていません –

+2

ストアドプロシージャは意味をなさない...セットその名前をすでに持っている行のサプライヤー名を '@ SUPPLIERNAME'に置き換えて、何も変更しません。現在の名前ではなく、主キーに基づいて更新する行を選択する必要があります。 –

答えて

1

あなたには複数の問題があります。

まず、Thomas Levesqueが提案したように、更新クエリを修正する必要があります。 SQL Serverテーブルには、たとえば更新などのためにレコードを一意に識別できるプライマリキーが必要です。

あなたができる最も簡単なことは、そのプライマリキーをint型のアイデンティティに設定し、それを自己生成させることです。あなたのサプライヤーの表は、次のようになります。

SupplierID int, Primary Key, identity 
SupplierName nvarchar(100) 

を今、あなたは更新を行うとき、あなたはこのようにそれを行うだろう:

Update SupplierMaster 
Set SupplierName = @supplierName 
Where SupplierID = @suplierID 

このようなSQL文がint型の値を返します。この戻り値は、この更新ステートメントが変更されたSQL行の数を示します。 0と表示された場合は、SQLステートメントが通過したIDを見つけることができず、何も変更されていないことを意味します。 1と表示され、レコードが見つけられ、更新されました.1つ以上のSQLステートメントに問題があり、複数の行が更新された場合、レコードが見つかって更新されました。

この戻り値をチェックすると、更新ステートメントが成功したかどうかを判断する方法です。

関連する問題