2016-03-21 13 views
2

いくつかのbool変数の値のテーブルへの更新に関する疑問があります。私の構造は次のとおりです。SQLテーブル内の変数の "リスト"の値を更新する最も良い方法

C#では、私は、SQL Server 2014年(百よりも)

public bool varName1 = false; 
public bool varName2 = false; 
public bool varName3 = false; 

のようないくつかのブール変数などを持って、私は "DigitalInputs" と呼ばれるテーブルを持っており、そこに私は次のようなデータを持っています:

名前(nvarchar 255)|値(ビット)

VarName1 | True

VarName2 | False

VarName3 |真

など

私の質問ですが、私はそれを行うための最も効率的な方法になり、C#でのブール変数の値を持つ、SQL Serverのテーブルの値を更新したい場合は?

今私が使っていたものをした

using (SqlCommand command = new SqlCommand("UPDATE DigitalInputs SET Value = @VALUE WHERE Name = @NAME", connection)) 
{ 

command.Parameters.Add(new SqlParameter("NAME", "varName1")); 
command.Parameters.Add(new SqlParameter("VALUE", varName1.ToString())); 
command.ExecuteNonQuery(); //Execute the non query 
command.Parameters.Clear(); //Clear the parameters to add later new ones 

command.Parameters.Add(new SqlParameter("NAME", "varName2")); 
command.Parameters.Add(new SqlParameter("VALUE", varName2.ToString())); 
command.ExecuteNonQuery(); 
command.Parameters.Clear(); 

など

それは冒頭でうまく働いたが、今、100個の以上のブール変数で、それはゆっくりと、本当に(毎秒3回)を実行します。多分データテーブルやiEnumerableリストを使うことを考えていましたが、どのようにすればいいのか分かりません.C#とSQLでは本当に新しいものです。

// EDITEDは、TVP

に関する質問は、私は私が今持っていることで、DataTableのソリューションを実装するにはいくつかの問題を抱えている:SQLで

CREATE TYPE dbo.DigitalInputs AS TABLE 
(
Name NVARCHAR(255), 
Value BIT 
) 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE UpdateValue 
(@tableData AS dbo.DigitalInputs READONLY) 
AS 
BEGIN 
    SET NOCOUNT ON 
    UPDATE dbo.DigitalInputs 
    SET dbo.DigitalInputs.Value = @tableData.Value 
    FROM dbo.DigitalInputs 
    INNER JOIN @tableData ON dbo.DigitalInputs.Name = @tableData.Name 
END 

私はこのプロシージャの作成でSQLの構文がわからない、私はSQL言語で少し失われています。 エラーCS0117:

そして、C#で

は:System.Data.SqlDbType' does not contain a definition for構造化」SqlDbType.Structuredが存在していないと私はなぜ、私は次のエラーがいるか分からないよう

DataTable dataTable = new DataTable(); 
dataTable.Columns.Add("Name", typeof(string)); 
dataTable.Columns.Add("Value", typeof(bool)); 
dataTable.Rows.Add("varName1", varName1); 
//etc... 

using (SqlCommand command = new SqlCommand("UpdateValue", connection)) 
{ 
command.CommandType = CommandType.StoredProcedure; 
SqlParameter parameter = new SqlParameter("@tableData", dataTable); 
parameter.SqlDbType = SqlDbType.Structured; 
command.Parameters.Add(parameter); 
} 

に思えます。 Monodevelop 5.9.6を使用してUnity3Dでコードを書いています。

答えて

3

これらのいずれかを試すことができます。

1)表値パラメータ

その中に次の応答とのリンクを見てください。XML

として

How to pass table value parameters to stored procedure from .net code

2)を通過入力は、IDSからのXElementを作成します。同じアプローチを使用すると、代わりにXElementを渡します。次に、SQLでXMLを使用する方法の例については、下のリンクを参照してください。

https://msdn.microsoft.com/en-IN/library/ms187897.aspx

+0

ありがとう、私はテーブル値のパラメータを試してみよう! – MetalxBeat

+0

私はTVPで解決策を取り組んできましたが、私はそれを正しく理解することはできません。新しい質問を追加するために質問を編集しました。あなたがそれらを見ることができるなら、私は非常に感謝します、ありがとう! – MetalxBeat

+0

遅延のお詫びあなたが今それを解決したと確信しています、もしあなたが使用している.netのバージョンを確認できますか?わかりませんが、以前のバージョンの.net 4.0では、msdnのドキュメントの下に存在していたとは思いません。 https://msdn.microsoft.com/en-us/library/system.data.sqldbtype(v=vs.90).aspx – touchofevil

関連する問題