erdemaydin
Üye
- Katılım
- 7 Mar 2023
- Mesajlar
- 5
- Puanları
- 1
Evet portu yanlış yazmışım. Düzelttikten sonra bağlantı sağladım. Bazen göz önündeki şey bile gözden kaçabiliyor...params.port = 14333; bu değeri params.port = 1433; şeklinde güncellerseniz muhtemelen çalışacaktır.
static void row_callback(void * u, const tdsl::tds_colmetadata_token & colmd,
const tdsl::tdsl_row & row) {
SERIAL_PRINTLNF("row: %.4s %d", row [0].as<tdsl::char_view>().data(),
row [1].as<tdsl::int32_t>());
}
# burada a: int, b: varchar, c: float olsun
driver.execute_query("SELECT a,b,c FROM #example_table", callback)
static void callback(
void * u, const tdsl::tds_colmetadata_token & colmd,
const tdsl::tdsl_row & row){
tdsl::int32_t a = row[0].as<tdsl::int32_t>();
tdsl::char_view b = row[1].as<tdsl::char_view>();
float c = row[2].as<float>();
}
static void row_callback(void * u, const tdsl::tds_colmetadata_token & colmd,
const tdsl::tdsl_row & row) {
SERIAL_PRINTLNF("row: %s %s %s %s %s", row [0].as<tdsl::char_view>().data(),
row [1].as<tdsl::char_view>().data(),
row [2].as<tdsl::char_view>().data(),
row [3].as<tdsl::char_view>().data(),
row [4].as<tdsl::char_view>().data());
}
// --------------------------------------------------------------------------------
void loop() {
// Your queries goes here.
if(read_flag==1){
database_read();
read_flag=0;
}
}
void database_read() {
// Execute SELECT query on every tenth loop
auto query{TDSL_PMEMSTR("SELECT TOP (3) Name,ID,Address,City,Country FROM rfid_user")};
SERIAL_PRINTF("Executing query: ");
SERIAL_PRINTLNF_PROGMEM(query.raw_data());
// We're using the row
auto result = driver.execute_query(query, row_callback);
SERIAL_PRINTLNF("Rows affected: %d", result.affected_rows);
}
Initializing ethernet interface
Initializing tdslite
Executing query: SELECT TOP (3) Name,ID,Address,City,Country FROM rfid_user
row: U 1 O B T
row: S 3 D B T
row: S 6 E B T
Rows affected: 3
Name ID Address City Country
UĞUR 11B41624 OSMANGAZI BURSA TÜRKIYE
SENA 325EEA45 DEMIRTAŞ BURSA TÜRKIYE
SİNAN 645E2FFC EMEK BURSA TÜRKİYE
Name nvarchar(100)
ID nvarchar(10)
Address nvarchar(100)
City nvarchar(50)
Country nvarchar(50)
static void row_callback(void * u, const tdsl::tds_colmetadata_token & colmd,
const tdsl::tdsl_row & row) {
SERIAL_PRINTLNF("row: %s %s %s %s %s", row [0].as<tdsl::char_view>().data(),
row [1].as<tdsl::char_view>().data(),
row [2].as<tdsl::char_view>().data(),
row [3].as<tdsl::char_view>().data(),
row [4].as<tdsl::char_view>().data());
// Verileri string değişkene atama
tdsl::char_view a = row[0].as<tdsl::char_view>();
tdsl::char_view b = row[1].as<tdsl::char_view>();
tdsl::char_view c = row[2].as<tdsl::char_view>();
tdsl::char_view d = row[3].as<tdsl::char_view>();
tdsl::char_view e = row[4].as<tdsl::char_view>();
Name[10] = row[0].as<tdsl::char_view>();
SERIAL_PRINTLNF("row: %s", a);
SERIAL_PRINTLNF("row: %s", String(a));
SERIAL_PRINTLNF("row: %s", Name);
SERIAL_PRINTLNF("row: %s", String(Name));
}
row: S⸮NAN 645E2FFC EMEK BURSA T⸮RK⸮YE⸮
row: ⸮
row:
row:
row:
Rows affected: 3
1) Okuduğumuz verileri varchar verilerini String bir değişkene nasıl aktarabiliriz. Okuduğum verileri farklı yerlerde kullanmak istiyorum.
2) Türkçe karakter okuma sorununun bir çözümü var mı ?
C:static void row_callback(void * u, const tdsl::tds_colmetadata_token & colmd, const tdsl::tdsl_row & row) { SERIAL_PRINTLNF("row: %s %s %s %s %s", row [0].as<tdsl::char_view>().data(), row [1].as<tdsl::char_view>().data(), row [2].as<tdsl::char_view>().data(), row [3].as<tdsl::char_view>().data(), row [4].as<tdsl::char_view>().data()); // Verileri string değişkene atama tdsl::char_view a = row[0].as<tdsl::char_view>(); tdsl::char_view b = row[1].as<tdsl::char_view>(); tdsl::char_view c = row[2].as<tdsl::char_view>(); tdsl::char_view d = row[3].as<tdsl::char_view>(); tdsl::char_view e = row[4].as<tdsl::char_view>(); Name[10] = row[0].as<tdsl::char_view>(); SERIAL_PRINTLNF("row: %s", a); SERIAL_PRINTLNF("row: %s", String(a)); SERIAL_PRINTLNF("row: %s", Name); SERIAL_PRINTLNF("row: %s", String(Name)); }
Kod:row: S⸮NAN 645E2FFC EMEK BURSA T⸮RK⸮YE⸮ row: ⸮ row: row: row: Rows affected: 3
tdsl::u16char_view a = row[0].as<tdsl::u16char_view>();
tdsl::u16char_view b = row[1].as<tdsl::u16char_view>();
tdsl::u16char_view c = row[2].as<tdsl::u16char_view>();
tdsl::u16char_view d = row[3].as<tdsl::u16char_view>();
tdsl::u16char_view e = row[4].as<tdsl::u16char_view>();
char buf[128] = {};
tdsl::char_view field = row[0].as<tdsl::char_view>();
memcpy(buf, field.data(), field.size_bytes());
buf[127] = '\0';
String s{buf};
tdsl::char_view field = row[0].as<tdsl:::char_view>();
String s{field.data(), field.size_bytes()};
Selamlar,
Okuduğunuz sütün NVARCHAR türünde olduğu için sütunun collation türüne bağlı olmakla beraber her karakterin 2 byte uzunlukta olduğu UTF-16 veya UCS-2 encoding'e sahip. Dolayısıyla kodunuzu u16char_view kullanacak şekilde güncellemeniz, ve string türü kullanırken de "wide" string kullanmanız gerekiyor:
Kod:tdsl::u16char_view a = row[0].as<tdsl::u16char_view>(); tdsl::u16char_view b = row[1].as<tdsl::u16char_view>(); tdsl::u16char_view c = row[2].as<tdsl::u16char_view>(); tdsl::u16char_view d = row[3].as<tdsl::u16char_view>(); tdsl::u16char_view e = row[4].as<tdsl::u16char_view>();
Okuduğunuz veriyi string'e atamak ile alakalı ise, veriyi istediğiniz yere kopyalamanız gerekiyor:
Kod:char buf[128] = {}; tdsl::char_view field = row[0].as<tdsl::char_view>(); memcpy(buf, field.data(), field.size_bytes()); buf[127] = '\0'; String s{buf};
... veya
Kod:tdsl::char_view field = row[0].as<tdsl:::char_view>(); String s{field.data(), field.size_bytes()};
static void row_callback(void * u, const tdsl::tds_colmetadata_token & colmd,
const tdsl::tdsl_row & row) {
SERIAL_PRINTLNF("row: %s %s %s %s %s", row[0].as<tdsl::char_view>().data(),
row [1].as<tdsl::char_view>().data(),
row [2].as<tdsl::char_view>().data(),
row [3].as<tdsl::char_view>().data(),
row [4].as<tdsl::char_view>().data());
// Verileri string değişkene atama
char buf[128] = {};
tdsl::char_view field = row[0].as<tdsl::char_view>();
memcpy(buf, field.data(), field.size_bytes());
buf[127] = '\0';
String s{buf};
Serial.println(s);
}
Executing query: SELECT TOP (4) Name,ID,Address,City,Country FROM rfid_user
row: U⸮UR 11B41624 OSMANGAZ⸮ BURSA T⸮RK⸮YE⸮
U⸮UR
row: MUSTAFA DA⸮ 191B160E YILDIRIM BURSA T⸮RK⸮YE⸮
MUSTAFA DA⸮
row: SENA 325EEA45 DEM⸮RTA⸮ BURSA T⸮RK⸮YE⸮
SENA
row: S⸮NAN 645E2FFC EMEK BURSA T⸮RK⸮YE⸮
S⸮NAN
Rows affected: 4
Merhaba mustafakemalgilor,Selamlar arkadaşlar!
Paylaştığınız `arduino-mssql` kütüphanenin yazarıyım, internette gezinirken konunuza rast geldim ve size ufak bir bilgilendirme yapmak istedim.
`arduino-mssql` kütüphanesi konseptin kanıtı (proof-of-concept) olarak yaptığım bir çalışmaydı, kısa süre önce kütüphanenin halefi olarak `tdslite` adlı yeni bir kütüphaneyi yayınladım. MSSQL'e bağlanmak için bu yeni kütüphaneyi kullanabilirsiniz. Kütüphaneyi Arduino Library Manager veya Platform IO Registry'da `tdslite` olarak aratarak bulabilirsiniz. Alternatif olarak, GitHub reposunda yayınlanan sürümlerden "zip" halini indirerek de kullanabilirsiniz.
Yeni kütüphane platform bağımsız bir yapıda olduğundan Arduino dışında bir çok board'da (örn. ESP, STM) da kullanabilirsiniz. Başlangıç örneği olarak https://github.com/mustafakemalgilo...les/arduino/03-select-rows/03-select-rows.ino bu örneği incelemenizi öneririm.
https://github.com/mustafakemalgilor/tdslite
Sağlıcakla kalın,
Mustafa
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?