sql data yazma
merhaba script ile veri tabanına daya yazmak istiyorum ama başarılı olamadım aşağıdaki kod ile yapmaya çaliştım
Dim SQL_cn As New SqlConnection()
SQL_cn.ConnectionString = “Server=(local)\WINTR\WinTr;uid=sa;pwd=12341234;database=dataproje”
SQL_cn.Open()
Dim SQL_Ins As String
‘Set Datetime Format
SQL_Ins = “SET DATEFORMAT dmy”
Dim SQL_date As SqlCommand = New SqlCommand(SQL_Ins, SQL_cn)
Dim SQL_cmdnon As SqlCommand = New SqlCommand(SQL_Ins, SQL_cn)
if tiptag = True Then
tip = “Sağ”
Else
tip= “Sol”
End If
sonuc=”OK”
‘Adding data
SQL_Ins = “INSERT INTO Table1(LastValue,DateTime,NotSet,tip,sonuc,tork1deger,tork2deger)”
SQL_Ins = SQL_Ins & ” VALUES(‘” & Row_Count & “‘,'” & Now & “‘,’0’,'” & tip & “‘,'” & sonuc & “‘,'” & Float_To_String(tork1)& “‘,'” & Float_To_String(tork2) & “‘)”
SQL_cmdnon = New SqlCommand(SQL_Ins, SQL_cn)
SQL_cmdnon.ExecuteNonQuery()
‘Close Database connection
SQL_cn.Close()
kontrol = True
Catch ex As Exception
‘ messagebox.show(ex.tostring,ex.message)
‘ ScriptError = ex.message
End Try
‘——- Script End Line ——-
End Sub
Function Float_To_String(Byval Sayi as Single)
return Sayi.ToString(“G”, CultureInfo.CreateSpecificCulture(“en-US”))
End Function
End Class
End Namespace
Öncelikle script ile veri tabanına veri yazmak için orta seviyede visual basic bilmeniz gerekir.
Veri tabanına script ile veri yazmak yerine Trigger methodu ile yazabilirsiniz. Trigger tag’ının her tetiklemesinde seçilen Tag’lar database’e kaydedilir.
Script ile veri tabanına veri yazacaksanız, scada control panelinde, SQL server sekmesinde tanımlı database’e yazamazsınız. WinTr scada tarafından kullanılan bu database’e script ile satır eklediğinizde sonraki kayıtları scada yapamayacaktır.
Row_Count değişkenin database’de kayıtlı tüm LastValue değerlerinden farklı bir değer olmalıdır. Script içersinde bu değişkene değer yazan bir işlem olmadığı için zaten çalışmaz.
Sonuç: Anladığım kadarı ile bu scripti belli durumlarda çalıştırarak database’e kayıt eklemek istiyorsunuz. Bu işlem için Trigger ile kayıt methodunu kullanmalısınız. Tag taplosu üzerinde kaydını yapmak istediğiniz değişkenlerin sağında bulunan historical butonuna bastığınızda trigger seçeneğini seçin. Kaydet sinyali olarak bir tag seçin. Trigger tag’ı aynı anda kaydedilmesini istediğiniz tüm taglar için aynı olmalıdır. Database’e farklı methodlar ile başka kayıtlar yapıyorsanız, Farklı tablolar kullanabilirsiniz. Daha sonraki aşamada rapor oluşturmak için kolaylık olacaktır. Farklı tablo oluşturmak için control panelinde SQL server sekmesinde veya historical butonu ile açılan menüyü kullanabilirsiniz.
Was this answer helpful?
LikeDislikemerhaba trigger kayıt 2 kez kayıt yapıyor kullanamıyorum ben baska bır win tr ile proje oluşturdum ve dataproje adı ile veritabanını oluşturdum.Sonra başka bir wintr projesi ile sayfa refresh ile dataproje veritabanına yazmaya çalışıyordum başaramadım.Şuanki durum itibariyle hatalarımı buldum yazabiliyorum fakat sizinde belirttiğiniz gibi row count olayını çözemedim yoksa lastvalue degerine manuel değer yazdığımda sorunsuz calısıyor sizden ricam row count olayını nasıl çözebilirim sql taglar ile olmuyor mu ? işin sonuna geldim tıkandım teşekkürler
Was this answer helpful?
LikeDislikeAn itibariyle kayıt olayında çözdüm ama biraz uzun bir yol oldu tablodaki son kaydı bulup 1 artırıp oyle kaydediyorum kısa bir yolu vardır eminim
Was this answer helpful?
LikeDislikeEn kısa yolunu bulmuşsunuz zaten.
Trigger yükselen ve düşen kenarda kayıt alır. Bu nedenle iki defa kayıt alıyor. Her kayıt almak istediğinizde bir ise sıfır sıfır ise bir yapmalısınız. Siz kayıt için bir yapıp sonra sıfırlıyorsunuz her halde.
Was this answer helpful?
LikeDislikeplc de kaydet tagım var her parça sonunda 1 yapıp trigger olarak seçtim ilk parçada aktif oluyr kayıt yapıyor ıkıncı parcayı bklerken pasıf yapıyorm o arada yıne kayıt alıyor bir parçada ıkı kayıt olusuyor bndan dolayı kullanamadım.
Was this answer helpful?
LikeDislikeBöyle yaptığınızı tahmin ettim zaten. ilk parça geldiğinde bir yapın ikinci parça geldiğinde sıfır yapın. Sorununuz çözülecektir.
Was this answer helpful?
LikeDislikeMerhaba script ile veri tabanına başka bir tablodan alınan verileri yazmak için aşagıdaki kodu yazdım kodum çalışıyor.
Fakat tüm tabloyu taramak için SqlDataReader kullanmalımıyım kararsız kaldım çünkü SCADA açık kaldığı süre devamlı tabloyu taratıyorum.
Sizce SqlDataReader kullanmalımıyım
using System;
using System.IO;
using System.Windows.Forms;
using Microsoft.CSharp;
using System.Data;
using System.Data.SqlClient;
namespace WinTr
{
class MainClass
{
public Single kuyu_debi_eski_id;
public Single Kuyu_Toplam_debi;
public Single kuyu_numarasi;
public Boolean debi_bilgilerini_table1_yaz;
public Single kuyu_debi;
public String degisken_oku;
public void Load()
{
//——- Script Start Line ——-
//cihazın kayıtları tuttuğu tabloya bağlanıp anlık olarak kayıtları Scada veritabanına yazma, Table1 de aynı değişkenler oluşturulması gerekiyor.
//son kayıtı bul
SqlConnection baglanti = new SqlConnection(@”Server=(local)\WINTR;Initial Catalog=yas_pompa_analiz_scada_uygulamasi;User ID=sa;Password=WinTr@2013″);
baglanti.Open();
SqlCommand son_kayit_idsi = new SqlCommand(“SElECT IDENT_CURRENT(‘debimetre_bilgileri ‘)”,baglanti);
int sorgu_id_si= Convert.ToUInt16(son_kayit_idsi.ExecuteScalar());
//kuyu debisini al
kuyu_debi_eski_id=kuyu_debi_eski_id+1;//sayfa her yenilendiğinde kuyu_debi_eski_id 1 artığı için tüm kayıtları alıyor.
if(sorgu_id_si>=kuyu_debi_eski_id){//Son kayıta ulaşına duruyor.Böylece aynı kayıtları defalarca eklemiyor
SqlCommand kuyu_numarasi_al = new SqlCommand(“SELECT [GatewayName] FROM debimetre_bilgileri WHERE [id]=”+kuyu_debi_eski_id+””, baglanti);
kuyu_numarasi=Convert.ToInt16(kuyu_numarasi_al.ExecuteScalar());
SqlCommand kuyu_debi_al = new SqlCommand(“SELECT [HourlyLastIndex] FROM debimetre_bilgileri WHERE [id]=”+kuyu_debi_eski_id+””, baglanti);
kuyu_debi=Convert.ToInt16(kuyu_debi_al.ExecuteScalar());
SqlCommand kuyu_toplam_debi_al = new SqlCommand(“SELECT [Toplamdebi] FROM debimetre_bilgileri WHERE [id]=”+kuyu_debi_eski_id+””, baglanti);
Kuyu_Toplam_debi=Convert.ToInt16(kuyu_toplam_debi_al.ExecuteScalar());
if(debi_bilgilerini_table1_yaz==false) debi_bilgilerini_table1_yaz=true;
else debi_bilgilerini_table1_yaz=false;
}
else
{
string id_donusumu=sorgu_id_si.ToString();
kuyu_debi_eski_id=Convert.ToUInt16(id_donusumu);
}
baglanti.Close();
}
}
}
Was this answer helpful?
LikeDislikeElinize sağlık, bence güzel olmuş. Veri aldığınız tabloya çok hızlı veri yazılmıyorsa sorun çıkmayacağını düşünüyorum. Script her çalıştığında bir satır veri alıyor.
SqlDataReader kullanıp bir den çok satır getirebilirsiniz. Ama bu sefer scada veri tablosuna yazmakta sıkıntı çekersiniz. Anladığım kadarı ile trigger metodu ile kayıt yapıyorsunuz. Birden çok satır olduğunda Trigger metodu kullanamazsınız. Scada veri tabanına da script ile kayıt yapmanız gerekir.
Was this answer helpful?
LikeDislikeEvet Trigger metodu kullanıyorum. Birden çok kayıt olduğunda da denedim Script her çalıştığında bir satır veri eklediği için örneğin runtime da sayfa yenileme 1000 msn ise 960 satırı 16 dakika da tarayacaktır. Tabi ki bu süre uzun ama SCADA nın hiç çalışmadığını varsayarsak. Benim ilk kullanmak istediğim Trigger methodu değildi SqlDataReader ile veri tabanını tarayıp INSERT INTO ile runtime da Table 1 okunan verileri tek sefer de eklemekti fakat SCADA nın benim eklediğim veriden sonra LastValue değeri çakışır mı veya SCADA da sonraki süreçte ne olur tam kestiremedim.
Eğer ben Trigger methodunu kullanmayıp Script verileri Table 1 e eklesem SCADA da bir sorun olmadan nasıl ekleyebilirim.
Was this answer helpful?
LikeDislikeScada taglarını Trigger metodu ile database’e kaydedin. Fakat trigger’ı hiç tetiklemeyin. Kayıtları script ile yapın. Her hangi bir sorun çıkmaz.
Was this answer helpful?
LikeDislike