Using system;using system.collections.generic;using system.componentmodel;using system.data;using System.Drawing; Using system.linq;using system.text;using system.windows.forms;using system.runtime.interopservices;using microsoft.win32;using system.data.odbc;namespace sqlanywheredemo{public partial class Form5:form {[Dllimp ORT ("ODBC32")] public static extern short Sqlallochandle (short handletype, IntPtr Inputhandle, out IntPtr Outputhan DLE); [DllImport ("Odbc32", CharSet = CharSet.Unicode)] public static extern short SQLSetEnvAttr (IntPtr envhandle, ushort Attribute, IntPtr val, int stringlength); [DllImport ("Odbc32.dll", CharSet = CharSet.Ansi)] public static extern short sqldatasources (IntPtr Environmenthandl E, ushort Direction, StringBuilder ServerName, short BufferLength1, ref short namelength1ptr, StringBuilder Description, S Hort BufferLength2, ref short namelength2ptr); [DllImport ("ODBCCP32.dll")] private static Extern BOOL SQLConfigDataSource (IntPtr parent, int request, string driver, string attributes); [DllImport ("Odbccp32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern bool Sqlgetinstal LEDDRIVERSW (char[] lpszbuf, ushort Cbufmax, out ushort pcbbufout); public const int sql_success = 0; public const INT SQL_ERROR =-1; public const int sql_fetch_next = 1; public const int Sql_fetch_first = 2; public const int sql_fetch_first_user = 31; public const int Sql_fetch_first_system = 32; public const int sql_attr_odbc_version = 200; public const int SQL_HANDLE_ENV = 1; public const int SQL_HANDLE_DBC = 2; public const int SQL_HANDLE_STMT = 3; public const int SQL_HANDLE_DESC = 4; <summary>//////</summary> public Form5 () {InitializeComponent ( ); }//<summary>////</summary> <param name= "Sender" ></param>//<param name= "E" ></param> private void bu Tton1_click (object sender, EventArgs e) {list<odbcstr> ls = new list<odbcstr> (); Short Iresult = 0; IntPtr Lhenvin = (IntPtr) 0; IntPtr lhenv = (IntPtr) 0; StringBuilder Sdsnitem = new StringBuilder (1024); StringBuilder Sdrvitem = new StringBuilder (1024); Short Idsnlen = 0; Short Idrvlen = 0; SQLSetEnvAttr (Lhenv, INTPTR, 3, 0); Iresult = Sqlallochandle (1, Lhenvin, out lhenv); MessageBox.Show (Iresult.tostring (), "Iresult sqlallochandle"); Short Iresult = 0; IntPtr Lhenvin = (IntPtr) 0; IntPtr lhenv = (IntPtr) 0; StringBuilder Sdsnitem = new StringBuilder (1024); StringBuilder Sdrvitem = new StringBuilder (1024); Short Idsnlen = 0; Short IDRVLen = 0; Iresult = Sqlallochandle (sql_handle_env, Lhenvin, out lhenv); SQLSetEnvAttr (Lhenv, Sql_attr_odbc_version, (INTPTR) 3, 0); if (Iresult = = sql_success) {ODBCSTR sr = null; Iresult = Sqldatasources (lhenv, Sql_fetch_first, Sdsnitem, 1024x768, ref idsnlen, Sdrvitem, 1024x768, ref Idrvlen); while (Iresult = = sql_success) {sr=new odbcstr (); MessageBox.Show (Sdsnitem.tostring (), "sdsnitem.tostring ()"); Iresult = Sqldatasources (lhenv, Sql_fetch_next, Sdsnitem, 1024x768, ref idsnlen, Sdrvitem, 1024x768, ref Idrvlen); Sr. DSNname = Sdsnitem.tostring (); Sr. DriveName = Sdrvitem.tostring (); String str = "Server=home\0dsn=mydsn\0description=mydsndesc\0database=dbserver\0trusted_connection=yes"; SQLConfigDataSource ((IntPtr) 0, 4, "Sybase SQL Anywhere 5.0", str);//sql Server//messagebox.show (str); Ls. Add (SR); }} this.dataGridView1.DataSource = ls; }//<summary>///</summary>//<param name= "Sender" ></param> <param name= "E" ></param> private void button2_click (object sender, EventArgs e) { string[] list = Getodbcdrivernames (); }//<summary>//Gets The ODBC driver names from the Sqlgetinstalleddrivers function. </summary>//<returns>a string array containing the ODBC driver names, if the call to Sqlgetinsta Lleddrivers was successfull; NULL, otherwise.</returns> public static string[] Getodbcdrivernames () {string[] Odbcdrive Rnames = null; char[] Drivernamesbuffer = new Char[ushort. MaxValue]; UShort size; BOOL succeeded = SqlgetinstalleddriveRsW (Drivernamesbuffer, ushort. MaxValue, out size); if (succeeded = = True) {char[] drivernames = new Char[size-1]; Array.copy (Drivernamesbuffer, Drivernames, size-1); Odbcdrivernames = (new string (Drivernames)). Split (' + '); } return odbcdrivernames; }}///<summary>//20180223///Geovin Du//</summary> public class Odbcstr {//<summary>////</summary> public string DriveName {get; set;} <summary>//////</summary> public string DSNname {get; set;} <summary>//////</summary> public string ServerName {get; set;} <summary>//////</summary> public string DatabaseName {get; set;} <summary>////</summary> public string Datasrource {get; set;} <summary>//////</summary> public string datafile {get; set;} }}
<summary>/////</summary>/<param name= "Sender" ></param> <param name= "E" ></param> private void Button3_Click (object sender, EventArgs e) { String connectionString = "Dsn=localserver"; System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder (); Builder. ConnectionString = ConnectionString; String server = builder["Data Source"] as String; string database = builder["Initial Catalog"] as String; String constring = "Server=localhost;database=tree; Uid=root; Password=branch; Min Pool Size = 0; Max Pool size=200 "; SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder (constring); String user = Builder. UserID; String pass = Builder. Password; Odbcconnectionstringbuilder Buil =new odbcconnectionstringbuilder (); Buil. Driver = "Sybase SQL Anywhere 5.0"; Buil. DSN = "Achive"; System.Data.Odbc.OdbcConnectionStringBuilder Connbuilder = new System.Data.Odbc.OdbcConnectionStringBuilder (); CONNBUILDER.DSN = "Achive"; Connbuilder.driver = "Sybase SQL Anywhere 5.0"; Connbuilder.add ("UID", ""); Connbuilder.add ("pwd", ""); Connbuilder.add ("Database", "Tu Ju Wen"); String sss = Connbuilder.tostring (); MessageBox.Show (Connbuilder.tostring ()); System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection (connbuilder.tostring ()); try {Conn. Open (); System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand ("SELECT count (*) from item_description", conn); var reader = Comm. ExecuteReader (); while (reader. Read ()) {MessageBox.Show (reader[0]. ToString ()); } MessageBox.Show ("Connection succeeded! "); } catch (Exception ex) {MessageBox.Show (ex. Message.tostring ()); } finally {Conn. Close (); }//Set//odbcconnectionstringbuilder.dsn=connectionstring; }//<summary>///</summary>/<param name= "Database" ></param> ; <param name= "Version" ></param>///<returns></returns> public static string Geto Dbcdrivername (String Database, String Version) {string odbcdrivername = ""; RegistryKey RegistryKey = registry.localmachine; RegistryKey Registrysubkey = Registrykey.opensubkey (@ "Software\odbc\odbcinst. Ini\ "); string[] Subkeynames = Registrysubkey.getsubkeynames (); foreach (String KeyName in Subkeynames) {if (Keyname.contains (Database) && keyname.contains (Version)) { Odbcdrivername = KeyName; Break }} registrysubkey.close (); Registrykey.close (); return odbcdrivername; }//<summary>///</summary>//<param name= "Sender" ></param> <param name= "E" ></param> private void Button4_Click (object sender, EventArgs e) { Odbcconnectionstringbuilder Odbcconnectionstringbuilder = new Odbcconnectionstringbuilder (); OdbcCommand OdbcCommand; int recordfound = 0; Odbcconnectionstringbuilder.driver = Getodbcdrivername ("Sybase SQL Anywhere", "5.0"); if (Odbcconnectionstringbuilder.driver = = "") {MessageBox.Show ("ODBC Driver is not ins Talled "); return-1; } odbcconnectionstringbuilder.add ("DSN", "achive"); Odbcconnectionstringbuilder.add ("UID", "No-user"); Odbcconnectionstringbuilder.add ("PWD", "No-pass"); Odbcconnectionstringbuilder.add ("DB", @ "C:\Documents and Settings\geovindu\my documents\visual Studio 2010\projects\ sqlanywheredemo\sqlanywheredemo\bin\debug\geovindu.db; "); Copy of database SPORTS Odbcconnectionstringbuilder.add ("HOST", "."); Odbcconnectionstringbuilder.add ("PORT", "5162"); I found this port inn the log file using (odbcconnection connection = new OdbcConnection (odbcconnections tringbuilder.connectionstring)) {connection. Open (); try {OdbcCommand = new OdbcCommand ("Select COUNT (*) from pub. Invoice WHERE invoicenum > 0 ", connection); Odbccommand.commandtimeout = 1; Object executescalarresult = Odbccommand.executescalar (); Recordfound = Convert.ToInt32 (Executescalarresult); } catch (Exception ex) {MessageBox.Show (ex. Message.tostring ()); } } }
Csharp:read system DSN configured get Driver Names on Windows