Birkaç boole değişkeninin değerinin bir tabloya güncellenmesiyle ilgili şüphelerim var. Benim yapısı şöyledir:SQL tablosundaki değişkenlerin "listesinin" değerini güncellemenin en iyi yolu
C#, ben
public bool varName1 = false;
public bool varName2 = false;
public bool varName3 = false;
vb
(Yüzden fazla)
SQL Server 2014'te, bir tablo "DigitalInputs" olarak adlandırılan ve benzeri birçok bool değişken var Orada aşağıdaki gibi verilerim var:
Ad (nvarchar 255) | Değer (bit)
VarName1 | True
VarName2 | Yanlış
VarName3 | Gerçek
vb
Sorum şu, bunu yapmak için en etkili yolu olacaktır C# bool değerlerden oluşan değerlerle sql sunucusunun tablosundaki değerleri, güncellemek istiyorsanız? Ben kullanıyordum Şimdi ne olacak
oldu:
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();
vb başında ince ama şimdi 100'den fazla bool değerlerden ile çalıştı
, gerçekten yavaş yavaş (3 kez saniyede) çalıştırır. Belki bir veri tablosu veya iEnumerable bir liste kullanmayı düşünüyordum ama nasıl yapmalıyım emin değilim, C# ve SQL'de gerçekten yeniyim.
TVP
Ben uygulayan DataTable çözümde bazı sorunlar yaşıyorum ilişkin sorular, ne şu an sahip olduğu, DÜZENLENECEK //:
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
I: SQL
Bu yordamın oluşturulmasında SQL sözdizimi hakkında emin değilim, SQL dili ile biraz kayboldum. hata CS0117:
Ve C#
:System.Data.SqlDbType' does not contain a definition for
Yapılandırılmış' SqlDbType.Structured yok ve neden ben aşağıdaki hata var bilmiyormuşum gibi 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);
}
görünüyor. Monodevelop 5.9.6'yı kullanarak Unity3D'deki kodu yazıyorum.
Çok teşekkür ederim, deneyeceğim tablo değeri parametreleri değilim! – MetalxBeat
Çözümün etrafında TVP ile çalışıyorum ama doğru anlayamıyorum. Yeni sorularımı eklemek için sorumu düzenledim. Onlara bir göz atabilirseniz çok minnettar olacağım, teşekkürler! – MetalxBeat
Gecikme için özür dilerim. Şimdiye kadar çözdüğünüzden emin misiniz, yoksa, kullandığınız .net sürümünü kontrol edebilir misiniz? Emin değilim ama msdn belgelerinden, .net 4.0 öncesi sürümünde mevcut olduğunu sanmıyorum. https://msdn.microsoft.com/en-us/library/system.data.sqldbtype(v=vs.90).aspx – touchofevil