www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - D2 (Debian) + MSSQL

reply "Sergey" <httpal gmail.com> writes:
I use d for some time for the job. And it is good. And I want to 
use it consistently for the production, but as soon as I started 
with the simplest - the connection to the database, I realized 
that the language is not yet ready for it. Or suggest the use of 
crutches on the forum.

So, there are plans to create a native library for connecting to 
databases to begin with?

Thanks in advance
Regards, Sergey.
Oct 09 2014
next sibling parent ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Thu, 09 Oct 2014 07:25:19 +0000
Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 So, there are plans to create a native library for connecting to=20
 databases to begin with?
have you tried to read the forums before posting?
Oct 09 2014
prev sibling next sibling parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Thu, 09 Oct 2014 07:25:19 +0000
Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

sorry for being rude, i mean that we have mysql-native, for the start.
and we can easily use any C library. i.e. working on "native" libraries
at least started, and connecting to DB servers is possible.
Oct 09 2014
parent reply "Sergey" <httpal gmail.com> writes:
On Thursday, 9 October 2014 at 07:51:23 UTC, ketmar via 
Digitalmars-d wrote:
 On Thu, 09 Oct 2014 07:25:19 +0000
 Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 sorry for being rude, i mean that we have mysql-native, for the 
 start.
 and we can easily use any C library. i.e. working on "native" 
 libraries
 at least started, and connecting to DB servers is possible.
I found this (and similar topics): http://forum.dlang.org/thread/l403bf$139g$1 digitalmars.com?page=1 But there is no good solution for the production, which need reliability.
Oct 09 2014
next sibling parent "Sergey" <httpal gmail.com> writes:
I tried this:
http://forum.dlang.org/thread/l403bf$139g$1 digitalmars.com#post-l4089g:241723:241:40digitalmars.com
but does not work.
Oct 09 2014
prev sibling next sibling parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Thu, 09 Oct 2014 07:58:24 +0000
Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 But there is no good solution for the production, which need=20
 reliability.
mssql is not a database of choise. ;-) i.e. there aren't alot of people writing DB frontends in D, and those who writing web apps using mysql. so i don't think that you'll find something better that what we have now. virtually nobody is using mssql with GNU/Linux.
Oct 09 2014
parent reply Jacob Carlborg <doob me.com> writes:
On 09/10/14 10:08, ketmar via Digitalmars-d wrote:

 virtually nobody is using mssql with GNU/Linux.
1. Who said anything about GNU/Linux 2. At my previous work we used SQL Server together with Ruby on Rails running on Linux. Odd fit, I know -- /Jacob Carlborg
Oct 10 2014
parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Fri, 10 Oct 2014 09:02:16 +0200
Jacob Carlborg via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 On 09/10/14 10:08, ketmar via Digitalmars-d wrote:
=20
 virtually nobody is using mssql with GNU/Linux.
1. Who said anything about GNU/Linux
topicstarter. the word "Debian" has very defined meaning.
 2. At my previous work we used SQL Server together with Ruby on Rails=20
 running on Linux. Odd fit, I know
that's why i added the word "virtually". ;-)
Oct 10 2014
parent reply Jacob Carlborg <doob me.com> writes:
On 10/10/14 09:40, ketmar via Digitalmars-d wrote:

 topicstarter. the word "Debian" has very defined meaning.
Point taken, missed that :) -- /Jacob Carlborg
Oct 10 2014
parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Fri, 10 Oct 2014 16:21:12 +0200
Jacob Carlborg via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 On 10/10/14 09:40, ketmar via Digitalmars-d wrote:
 topicstarter. the word "Debian" has very defined meaning.
Point taken, missed that :)
that's why i switched to maillist. nice archives, nice threading, nice searching and subject text in each line. ;-)
Oct 10 2014
parent Jacob Carlborg <doob me.com> writes:
On 2014-10-10 16:35, ketmar via Digitalmars-d wrote:

 that's why i switched to maillist. nice archives, nice threading, nice
 searching and subject text in each line. ;-)
I have that as well, in Thunderbird. I just somehow filtered out "Debian", perhaps due to the parentheses, perhaps a Lisp filter :) -- /Jacob Carlborg
Oct 10 2014
prev sibling parent reply Russel Winder via Digitalmars-d <digitalmars-d puremagic.com> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 09/10/14 09:08, ketmar via Digitalmars-d wrote:
 On Thu, 09 Oct 2014 07:58:24 +0000 Sergey via Digitalmars-d
 <digitalmars-d puremagic.com> wrote:
 
 But there is no good solution for the production, which need 
 reliability.
mssql is not a database of choise. ;-) i.e. there aren't alot of people writing DB frontends in D, and those who writing web apps using mysql. so i don't think that you'll find something better that what we have now. virtually nobody is using mssql with GNU/Linux.
And most people are now using MariaDB! - -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.winder ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlQ2Ri0ACgkQ+ooS3F10Be8FqACfc4ewOblXohqUh6kymSmQFsoe 3YYAoOoCausvhfVwh7ddq9nKiDh0bi7H =cAAU -----END PGP SIGNATURE-----
Oct 09 2014
parent reply Paulo Pinto <pjmlp progtools.org> writes:
Am 09.10.2014 um 10:24 schrieb Russel Winder via Digitalmars-d:
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1

 On 09/10/14 09:08, ketmar via Digitalmars-d wrote:
 On Thu, 09 Oct 2014 07:58:24 +0000 Sergey via Digitalmars-d
 <digitalmars-d puremagic.com> wrote:

 But there is no good solution for the production, which need
 reliability.
mssql is not a database of choise. ;-) i.e. there aren't alot of people writing DB frontends in D, and those who writing web apps using mysql. so i don't think that you'll find something better that what we have now. virtually nobody is using mssql with GNU/Linux.
And most people are now using MariaDB!
Really? I am yet to do any project with it instead of MySQL. -- Paulo
Oct 09 2014
next sibling parent reply "Dicebot" <public dicebot.lv> writes:
On Thursday, 9 October 2014 at 17:11:57 UTC, Paulo Pinto wrote:
 Really? I am yet to do any project with it instead of MySQL.

 --
 Paulo
All I know is that in Arch Linux MySQL is not even in official repos anymore, only MariaDB is there :)
Oct 09 2014
parent reply Paulo Pinto <pjmlp progtools.org> writes:
Am 09.10.2014 um 19:23 schrieb Dicebot:
 On Thursday, 9 October 2014 at 17:11:57 UTC, Paulo Pinto wrote:
 Really? I am yet to do any project with it instead of MySQL.

 --
 Paulo
All I know is that in Arch Linux MySQL is not even in official repos anymore, only MariaDB is there :)
The Enterprise only knows RedHat, SuSE and Ubuntu as GNU/Linux distributions. :)
Oct 09 2014
parent reply "Dicebot" <public dicebot.lv> writes:
On Thursday, 9 October 2014 at 18:36:10 UTC, Paulo Pinto wrote:
 Am 09.10.2014 um 19:23 schrieb Dicebot:
 All I know is that in Arch Linux MySQL is not even in official 
 repos
 anymore, only MariaDB is there :)
The Enterprise only knows RedHat, SuSE and Ubuntu as GNU/Linux distributions. :)
Arch Linux knows no stinking enterprise :P
Oct 09 2014
parent reply Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
On 10/09/2014 02:47 PM, Dicebot wrote:
 On Thursday, 9 October 2014 at 18:36:10 UTC, Paulo Pinto wrote:
 Am 09.10.2014 um 19:23 schrieb Dicebot:
 All I know is that in Arch Linux MySQL is not even in official repos
 anymore, only MariaDB is there :)
The Enterprise only knows RedHat, SuSE and Ubuntu as GNU/Linux distributions. :)
Arch Linux knows no stinking enterprise :P
You made him sad! http://www.semitwist.com/download/sadpicard.jpg :P
Oct 09 2014
parent reply "Sergey" <httpal gmail.com> writes:
Well, thanks for the explanation, now I understand more at the 
expense of Microsoft.
It is a pity that it is not possible to write a client on D for 
mssql now.
I liked the language D.

Thank you all ...

P.s.
I work in a company where a very large database, and very 
stability is important, data integrity, etc. And mysql or MariaDB 
not suitable for these tasks. Maybe in the future turn out to use 
PostgreSQL.
Oct 09 2014
next sibling parent reply Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
On 10/09/2014 09:33 PM, Sergey wrote:
 Well, thanks for the explanation, now I understand more at the expense
 of Microsoft.
 It is a pity that it is not possible to write a client on D for mssql now.
 I liked the language D.

 Thank you all ...

 P.s.
 I work in a company where a very large database, and very stability is
 important, data integrity, etc. And mysql or MariaDB not suitable for
 these tasks. Maybe in the future turn out to use PostgreSQL.
As people have said, you can just use a C lib. D links to C.
Oct 09 2014
parent Rikki Cattermole <alphaglosined gmail.com> writes:
On 10/10/2014 3:32 p.m., Nick Sabalausky wrote:
 On 10/09/2014 09:33 PM, Sergey wrote:
 Well, thanks for the explanation, now I understand more at the expense
 of Microsoft.
 It is a pity that it is not possible to write a client on D for mssql
 now.
 I liked the language D.

 Thank you all ...

 P.s.
 I work in a company where a very large database, and very stability is
 important, data integrity, etc. And mysql or MariaDB not suitable for
 these tasks. Maybe in the future turn out to use PostgreSQL.
As people have said, you can just use a C lib. D links to C.
On that note example: http://www.freetds.org/ which is used with OpenDBX.
Oct 09 2014
prev sibling parent reply "bachmeier" <no spam.net> writes:
On Friday, 10 October 2014 at 01:33:23 UTC, Sergey wrote:
 Well, thanks for the explanation, now I understand more at the 
 expense of Microsoft.
 It is a pity that it is not possible to write a client on D for 
 mssql now.
 I liked the language D.

 Thank you all ...

 P.s.
 I work in a company where a very large database, and very 
 stability is important, data integrity, etc. And mysql or 
 MariaDB not suitable for these tasks. Maybe in the future turn 
 out to use PostgreSQL.
If you want stability, you're a lot better off using tested C bindings than a lightly-tested native D binding. One of the advantages of D's interoperability with C libraries is that you don't have to rewrite code. A bigger advantage is that you can take advantage of all the testing that has been done on those C libraries.
Oct 10 2014
parent reply "Sergey" <httpal gmail.com> writes:
I try to do in this:
D version: http://pastebin.com/7tGyytDh
Tds file:  http://pastebin.com/JCA8XQH0
C version: http://pastebin.com/FWJM4B6X

First I checked the C version.

When I did this:
$ gcc -o connect_mssql connect_mssql.c
I got these errors:

/tmp/ccmW3YHR.o: In function `main':
connect_mssql.c:(.text+0x18): undefined reference to `dbinit'
connect_mssql.c:(.text+0x50): undefined reference to `dblogin'
connect_mssql.c:(.text+0xaf): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0xce): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0xed): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0x12d): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0x14c): undefined reference to `tdsdbopen'
connect_mssql.c:(.text+0x19b): undefined reference to `dbuse'
connect_mssql.c:(.text+0x1dd): undefined reference to 
`dbloginfree'
connect_mssql.c:(.text+0x1f4): undefined reference to `dbcmd'
connect_mssql.c:(.text+0x203): undefined reference to `dbsqlexec'
connect_mssql.c:(.text+0x245): undefined reference to `dbresults'
connect_mssql.c:(.text+0x277): undefined reference to `dbbind'
connect_mssql.c:(.text+0x2a9): undefined reference to `dbbind'
connect_mssql.c:(.text+0x2e4): undefined reference to `dbnextrow'
connect_mssql.c:(.text+0x2f8): undefined reference to `dbfreebuf'
connect_mssql.c:(.text+0x307): undefined reference to `dbclose'
connect_mssql.c:(.text+0x30c): undefined reference to `dbexit'
collect2: error: ld returned 1 exit status

And then I added this: "-l sybdb" and it works.
$ gcc -o connect_mssql connect_mssql.c -l sybdb
$ ./connect_mssql
(I got some data from sql server)

Then I tried to do it on D:
$ dmd test_tds_connect.d
And I received similar errors:

test_tds_connect.o: In function `_Dmain':
test_tds_connect.d:(.text._Dmain+0x64): undefined reference to 
`dbinit'
test_tds_connect.d:(.text._Dmain+0x88): undefined reference to 
`dblogin'
test_tds_connect.d:(.text._Dmain+0xc4): undefined reference to 
`dbsetluser'
test_tds_connect.d:(.text._Dmain+0xdb): undefined reference to 
`dbsetlpwd'
test_tds_connect.d:(.text._Dmain+0xf2): undefined reference to 
`dbsetlapp'
test_tds_connect.d:(.text._Dmain+0x12c): undefined reference to 
`dbsetlhost'
test_tds_connect.d:(.text._Dmain+0x140): undefined reference to 
`dbopen'
test_tds_connect.d:(.text._Dmain+0x18c): undefined reference to 
`dbuse'
test_tds_connect.d:(.text._Dmain+0x1df): undefined reference to 
`dbloginfree'
test_tds_connect.d:(.text._Dmain+0x1f0): undefined reference to 
`dbcmd'
test_tds_connect.d:(.text._Dmain+0x1fe): undefined reference to 
`dbsqlexec'
test_tds_connect.d:(.text._Dmain+0x22b): undefined reference to 
`dbresults'
test_tds_connect.d:(.text._Dmain+0x243): undefined reference to 
`dbbind'
test_tds_connect.d:(.text._Dmain+0x25b): undefined reference to 
`dbbind'
test_tds_connect.d:(.text._Dmain+0x273): undefined reference to 
`dbbind'
test_tds_connect.d:(.text._Dmain+0x281): undefined reference to 
`dbnextrow'
test_tds_connect.d:(.text._Dmain+0x2d4): undefined reference to 
`dbfreebuf'
test_tds_connect.d:(.text._Dmain+0x2df): undefined reference to 
`dbclose'
test_tds_connect.d:(.text._Dmain+0x2e4): undefined reference to 
`dbexit'
collect2: error: ld returned 1 exit status
--- errorlevel 1

I need to add sybdb when building on D?
How to do it?

Thanks in advance.
Oct 13 2014
parent reply "Sergey" <httpal gmail.com> writes:
On Tuesday, 14 October 2014 at 04:46:19 UTC, Sergey wrote:
 I try to do in this:
 D version: http://pastebin.com/7tGyytDh
 Tds file:  http://pastebin.com/JCA8XQH0
 C version: http://pastebin.com/FWJM4B6X

 First I checked the C version.

 When I did this:
 $ gcc -o connect_mssql connect_mssql.c
 I got these errors:

 /tmp/ccmW3YHR.o: In function `main':
 connect_mssql.c:(.text+0x18): undefined reference to `dbinit'
 connect_mssql.c:(.text+0x50): undefined reference to `dblogin'
 connect_mssql.c:(.text+0xaf): undefined reference to 
 `dbsetlname'
 connect_mssql.c:(.text+0xce): undefined reference to 
 `dbsetlname'
 connect_mssql.c:(.text+0xed): undefined reference to 
 `dbsetlname'
 connect_mssql.c:(.text+0x12d): undefined reference to 
 `dbsetlname'
 connect_mssql.c:(.text+0x14c): undefined reference to 
 `tdsdbopen'
 connect_mssql.c:(.text+0x19b): undefined reference to `dbuse'
 connect_mssql.c:(.text+0x1dd): undefined reference to 
 `dbloginfree'
 connect_mssql.c:(.text+0x1f4): undefined reference to `dbcmd'
 connect_mssql.c:(.text+0x203): undefined reference to 
 `dbsqlexec'
 connect_mssql.c:(.text+0x245): undefined reference to 
 `dbresults'
 connect_mssql.c:(.text+0x277): undefined reference to `dbbind'
 connect_mssql.c:(.text+0x2a9): undefined reference to `dbbind'
 connect_mssql.c:(.text+0x2e4): undefined reference to 
 `dbnextrow'
 connect_mssql.c:(.text+0x2f8): undefined reference to 
 `dbfreebuf'
 connect_mssql.c:(.text+0x307): undefined reference to `dbclose'
 connect_mssql.c:(.text+0x30c): undefined reference to `dbexit'
 collect2: error: ld returned 1 exit status

 And then I added this: "-l sybdb" and it works.
 $ gcc -o connect_mssql connect_mssql.c -l sybdb
 $ ./connect_mssql
 (I got some data from sql server)

 Then I tried to do it on D:
 $ dmd test_tds_connect.d
 And I received similar errors:

 test_tds_connect.o: In function `_Dmain':
 test_tds_connect.d:(.text._Dmain+0x64): undefined reference to 
 `dbinit'
 test_tds_connect.d:(.text._Dmain+0x88): undefined reference to 
 `dblogin'
 test_tds_connect.d:(.text._Dmain+0xc4): undefined reference to 
 `dbsetluser'
 test_tds_connect.d:(.text._Dmain+0xdb): undefined reference to 
 `dbsetlpwd'
 test_tds_connect.d:(.text._Dmain+0xf2): undefined reference to 
 `dbsetlapp'
 test_tds_connect.d:(.text._Dmain+0x12c): undefined reference to 
 `dbsetlhost'
 test_tds_connect.d:(.text._Dmain+0x140): undefined reference to 
 `dbopen'
 test_tds_connect.d:(.text._Dmain+0x18c): undefined reference to 
 `dbuse'
 test_tds_connect.d:(.text._Dmain+0x1df): undefined reference to 
 `dbloginfree'
 test_tds_connect.d:(.text._Dmain+0x1f0): undefined reference to 
 `dbcmd'
 test_tds_connect.d:(.text._Dmain+0x1fe): undefined reference to 
 `dbsqlexec'
 test_tds_connect.d:(.text._Dmain+0x22b): undefined reference to 
 `dbresults'
 test_tds_connect.d:(.text._Dmain+0x243): undefined reference to 
 `dbbind'
 test_tds_connect.d:(.text._Dmain+0x25b): undefined reference to 
 `dbbind'
 test_tds_connect.d:(.text._Dmain+0x273): undefined reference to 
 `dbbind'
 test_tds_connect.d:(.text._Dmain+0x281): undefined reference to 
 `dbnextrow'
 test_tds_connect.d:(.text._Dmain+0x2d4): undefined reference to 
 `dbfreebuf'
 test_tds_connect.d:(.text._Dmain+0x2df): undefined reference to 
 `dbclose'
 test_tds_connect.d:(.text._Dmain+0x2e4): undefined reference to 
 `dbexit'
 collect2: error: ld returned 1 exit status
 --- errorlevel 1

 I need to add sybdb when building on D?
 How to do it?

 Thanks in advance.
Wrong, I need to have: $ dmd test_tds_connect.d tds.d test_tds_connect.o: In function `_Dmain': tds.d:(.text._Dmain+0x64): undefined reference to `dbinit' tds.d:(.text._Dmain+0x88): undefined reference to `dblogin' tds.d:(.text._Dmain+0x140): undefined reference to `dbopen' tds.d:(.text._Dmain+0x18c): undefined reference to `dbuse' tds.d:(.text._Dmain+0x1df): undefined reference to `dbloginfree' tds.d:(.text._Dmain+0x1f0): undefined reference to `dbcmd' tds.d:(.text._Dmain+0x1fe): undefined reference to `dbsqlexec' tds.d:(.text._Dmain+0x22b): undefined reference to `dbresults' tds.d:(.text._Dmain+0x243): undefined reference to `dbbind' tds.d:(.text._Dmain+0x25b): undefined reference to `dbbind' tds.d:(.text._Dmain+0x273): undefined reference to `dbbind' tds.d:(.text._Dmain+0x281): undefined reference to `dbnextrow' tds.d:(.text._Dmain+0x2d4): undefined reference to `dbfreebuf' tds.d:(.text._Dmain+0x2df): undefined reference to `dbclose' tds.d:(.text._Dmain+0x2e4): undefined reference to `dbexit' test_tds_connect.o: In function `dbsetluser': tds.d:(.text.dbsetluser+0x18): undefined reference to `dbsetlname' test_tds_connect.o: In function `dbsetlpwd': tds.d:(.text.dbsetlpwd+0x18): undefined reference to `dbsetlname' test_tds_connect.o: In function `dbsetlapp': tds.d:(.text.dbsetlapp+0x18): undefined reference to `dbsetlname' test_tds_connect.o: In function `dbsetlhost': tds.d:(.text.dbsetlhost+0x18): undefined reference to `dbsetlname' collect2: error: ld returned 1 exit status --- errorlevel 1
Oct 13 2014
parent reply Jacob Carlborg <doob me.com> writes:
On 14/10/14 08:11, Sergey wrote:

 Wrong, I need to have:
 $ dmd test_tds_connect.d tds.d
You can use "rdmd" to compile and run an application: $ rdmd test_tds_connect.d It will automatically find all (D) dependencies for "test_tds_connect" and compile those as well. But you still need to link with the C library, as in the C example. $ rdmd -L-lsybdb test_tds_connect.d "-L" is the linker flag. -- /Jacob Carlborg
Oct 13 2014
next sibling parent ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Tue, 14 Oct 2014 08:34:36 +0200
Jacob Carlborg via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 On 14/10/14 08:11, Sergey wrote:
=20
 Wrong, I need to have:
 $ dmd test_tds_connect.d tds.d
=20 You can use "rdmd" to compile and run an application: =20 $ rdmd test_tds_connect.d =20 It will automatically find all (D) dependencies for "test_tds_connect" and compile those as well. But you still need to link with the C library, as in the C example. =20 $ rdmd -L-lsybdb test_tds_connect.d =20 "-L" is the linker flag.
also, rdmd has flag -build-only, which build binary and places it in the current directory. so rdmd can be used as build tool for simple projects.
Oct 14 2014
prev sibling parent reply "Sergey" <httpal gmail.com> writes:
Yes, it works now:
$ rdmd -L-lsybdb test_tds_connect.d
(If somehow get rid of "-L-lsybdb". Maybe add it somewhere in the 
code ...?)

I got some data from the server, and it is certainly:
005����������������������������������������
�����... etc.

I've written before transcoding function, and I need to get a 
byte string for this. So how to do it?

Now it's like:
DBCHAR[255] table_field;
dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(BYTE*)&table_field);

But I need to may be:
ubyte[] ubyte_value = [];
dbbind(dbconn, 1, NTBSTRINGBIND, 0, ubyte_value);
(it does not work of course)

Thanks in advance.
Oct 14 2014
next sibling parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Wed, 15 Oct 2014 01:48:58 +0000
Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 Now it's like:
 DBCHAR[255] table_field;
 dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(BYTE*)&table_field);
=20
 But I need to may be:
 ubyte[] ubyte_value =3D [];
 dbbind(dbconn, 1, NTBSTRINGBIND, 0, ubyte_value);
 (it does not work of course)
cast to the rescue! any pointer is an array too. just cast it! `cast(ubyte[])table_field`, for example.
Oct 14 2014
parent reply "Sergey" <httpal gmail.com> writes:
Do you mean:
ubyte[] ubyte_value = [];
dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(ubyte[])ubyte_value);

This error is:
test_tds_connect.d(84): Error: function tds.dbbind 
(tds_dblib_dbprocess* dbproc, int column, int vartype, int 
varlen, ubyte* varaddr) is not callable using argument types 
(tds_dblib_dbprocess*, int, int, int, ubyte[])
Oct 14 2014
parent reply ketmar via Digitalmars-d <digitalmars-d puremagic.com> writes:
On Wed, 15 Oct 2014 02:37:23 +0000
Sergey via Digitalmars-d <digitalmars-d puremagic.com> wrote:

 Do you mean:
 ubyte[] ubyte_value =3D [];
 dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(ubyte[])ubyte_value);
of course not. cast your DBCHAR array from the first example *after* you called 'dbbind'.
Oct 14 2014
parent "Sergey" <httpal gmail.com> writes:
Exactly, it's just, sorry... :)

Well, now everything works, thanks!
Now I will test and then will create a convenient wrapper.
Oct 14 2014
prev sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2014-10-15 03:48, Sergey wrote:
 Yes, it works now:
 $ rdmd -L-lsybdb test_tds_connect.d
 (If somehow get rid of "-L-lsybdb". Maybe add it somewhere in the code
pragma(lib, "sybdb"); But that won't work with GDC. I'm not sure if it works with LDC. -- /Jacob Carlborg
Oct 14 2014
next sibling parent "Sergey" <httpal gmail.com> writes:
On Wednesday, 15 October 2014 at 06:20:50 UTC, Jacob Carlborg 
wrote:
 On 2014-10-15 03:48, Sergey wrote:
 Yes, it works now:
 $ rdmd -L-lsybdb test_tds_connect.d
 (If somehow get rid of "-L-lsybdb". Maybe add it somewhere in 
 the code
pragma(lib, "sybdb"); But that won't work with GDC. I'm not sure if it works with LDC.
Yes, it works on the DMD, thanks !!! Now it is universally! I love it! Now just: $ rdmd test_tds_connect.d
Oct 14 2014
prev sibling parent reply "Sergey" <httpal gmail.com> writes:
When I get the data from MsSQL, I use this function to convert to 
Unicode:

char[] CP1251_TO_UTF8(char[] char_par) {
	ubyte[] ubyte_str = cast(ubyte[])char_par;
	int[] int_array = 
[0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F];
	char[] char_var = [];
	for (int i=0; i<ubyte_str.length; i++) {
		std.utf.encode(char_var, int_array[ubyte_str[i]]);
		}
	return char_var;
	}


And it works well.
But if I need to make a request with the condition, such as:
     "select some_field from some_table where some_field = 
'некоторый текст'"
so I have to do conversion in cp1251 and send it on line here:
      dbcmd(dbconn, "select some_field from some_table where 
some_field = 'значение'" .ptr);

How best to do this?

Or if I already have a byte string in cp1251 how to translate it 
into a normal string?

ubyte[] cp1251_ubyte_str = [115, 101, 108, 101, 99, 116, 32, 115, 
111, 109, 101, 95, 102, 105, 101, 108, 100, 32, 102, 114, 111, 
109, 32, 115, 111, 109, 101, 95, 116, 97, 98, 108, 101, 32, 119, 
104, 101, 114, 101, 32, 115, 111, 109, 101, 95, 102, 105, 101, 
108, 100, 32, 61, 32, 39, 167, 173, 160, 231, 165, 173, 168, 165, 
39];

Thanks in advance.
Oct 16 2014
next sibling parent reply "Sergey" <httpal gmail.com> writes:
Any help?
Oct 16 2014
parent "Sergey" <httpal gmail.com> writes:
Sorry, everything turned out simply, I'm very inattentive ...
Oct 17 2014
prev sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2014-10-17 07:24, Sergey wrote:

 Or if I already have a byte string in cp1251 how to translate it into a
 normal string?
Doesn't Sql Server uses UC2? -- /Jacob Carlborg
Oct 17 2014
parent "Sergey" <httpal gmail.com> writes:
On Friday, 17 October 2014 at 15:57:36 UTC, Jacob Carlborg wrote:
 On 2014-10-17 07:24, Sergey wrote:

 Or if I already have a byte string in cp1251 how to translate 
 it into a
 normal string?
Doesn't Sql Server uses UC2?
I finished two functions: utf8 -> sp1251 and sp1251 -> utf8, and it works well for me. What about the date format? I am getting from the sql server with the date field with this value: Jan 22 2007 12:00:00:000AM And it is the same on .d program and in .c program. Unfortunately, while I could not find how to change the date format in the example: DD.MM.YYYY.
Oct 20 2014
prev sibling parent "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> writes:
On Thursday, 9 October 2014 at 17:11:57 UTC, Paulo Pinto wrote:
 Am 09.10.2014 um 10:24 schrieb Russel Winder via Digitalmars-d:
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1

 On 09/10/14 09:08, ketmar via Digitalmars-d wrote:
 On Thu, 09 Oct 2014 07:58:24 +0000 Sergey via Digitalmars-d
 <digitalmars-d puremagic.com> wrote:

 But there is no good solution for the production, which need
 reliability.
mssql is not a database of choise. ;-) i.e. there aren't alot of people writing DB frontends in D, and those who writing web apps using mysql. so i don't think that you'll find something better that what we have now. virtually nobody is using mssql with GNU/Linux.
And most people are now using MariaDB!
Really? I am yet to do any project with it instead of MySQL.
Its protocol (and AFAIK database layout) is binary compatible to MySQL, so you usually wouldn't even notice it.
Oct 09 2014
prev sibling parent reply "Dicebot" <public dicebot.lv> writes:
On Thursday, 9 October 2014 at 07:25:21 UTC, Sergey wrote:
 So, there are plans to create a native library for connecting 
 to databases to begin with?
To put it shortly - very unlikely. Well, unless you do it yourself, of course, and contribute to the community :) It has a very small application domain and is not a blocker in a sense that C bindings can still be used. I'd consider it a very low priority issues on its own.
Oct 09 2014
parent "David Eagen" <davideagen mailinator.com> writes:
If there is a C library for MSSQL you should be able to use that 
from your D code. If you do, it would be handy for others if you 
could publish any bindings you create as a dub package 
(code.dlang.org).
Oct 09 2014