Csharp: read Sybase SQL anywhere5.5 using c#

2018/3/7 9:55:02 人评论 次浏览 分类:操作技巧

  private void button1_Click(object sender, EventArgs e)
        {
            try
            {

                //OdbcConnection conn = new OdbcConnection();  
                //conn.ConnectionString =   
                //         "ODBC;" +   
                //         "Driver={Sybase SQL Anywhere 5.0};" +   
                //         "DefaultDir=c:\myfolder\;" +   
                //         "Dbf=c:\mypath\dbname.db;" +   
                //         "Uid=UserName;" +   
                //         "Pwd=Secret;" +   
                //         "Dsn="""";";     // Must be included!  
                //conn.Open();   geovindu

                connectionString = "DSN=geovindu;UID=dba;PWD=sql;"; //Data Source=sademo

                using (OdbcConnection connection = new OdbcConnection(connectionString))
                {
                    connection.Open();
                    DataTable dt = new DataTable();// connection.GetSchema();
                    DataSet ds = new DataSet();
                   OdbcDataAdapter da = new OdbcDataAdapter("SELECT * FROM employee", connection);
                   da.Fill(ds);
                   dt = ds.Tables[0];
                    // Do work here. 
                   this.dataGridView1.DataSource = dt;
                }
            }
            catch (OdbcException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

讀取數据如下:  

http://www.dofactory.com/reference/connection-strings

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Data.Odbc;
using System.Data.SqlClient;

/*
 
https://msdn.microsoft.com/en-us/library/system.data.odbc.odbcconnection.connectionstring%28v=vs.110%29.aspx 
 * 
 * "Driver={SQL Server};Server=(local);Trusted_Connection=Yes;Database=AdventureWorks;"

"Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;Persist Security Info=False;Trusted_Connection=Yes"

"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\bin\Northwind.mdb"

"Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\bin\book1.xls"

"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:\bin"

"DSN=dsnname"
 * 
 DSN类型有以下三种:

用户DSN:该数据源只能对建立数据源的用户可见.
ODBC用户数据源存贮了如何与指定数据库提供者连接的信息.只对当前用户可见,而且只能用于当前机器上.这里的当前机器是只这个配置只对当前的机器有效,而不是说只能配置本机上的数据库.它可以配置局域网中另一台机器上的数据库.

系统DSN:该数据源对当前机器上所有的用户可见.
ODBC系统数据源存贮了如何指定数据库提供者连接的信息,系统数据对当前机器上的所有用户都是可见的,包括NT服务.也就是说在这里配置的数据源,只要是这台机器的用户都可以访问 .

文件DSN:该数据源对安装了相同驱动的用户可见 
用户DSN只被用户直接使用,它只能用于当前机器中,ASP不能使用它.系统DSN允许所有的用户登陆到特定服务器上去访问数据库,任何具有权限有用户都可以访问系统DSN.在WEB应用程序中访问数据库时,通常都是建立系统DSN. 文件DSN将信息存储在后缀为.dsn的文本文件中,优点是便于移动.

用户DSN只是针对当前用户或者特定用户;系统DSN是底层的,针对全部用户。一般没有特殊情况时,建议使用使用系统DSN,通用性好。
 */

namespace SQLanyWhereDemo
{

    /// <summary>
    /// 塗聚文 涂聚文
    /// </summary>
    public partial class Form4 : Form
    {


        RegistryKey regRootKey;
        RegistryKey regSubKey;
        /// <summary>
        /// 
        /// </summary>
        public Form4()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form4_Load(object sender, EventArgs e)
        {
            List<string> dsnList = new List<string>();
            ///定义Root指向注册表HKEY_LOCAL_MACHINE节点,

            ///如果是需要获取用户DSN则需要使用 Registry.CurrentUser;
            regRootKey = Registry.LocalMachine;

            ///定义注册表子Path
            string strRegPath = @"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources";
            regSubKey = regRootKey.OpenSubKey(strRegPath);
            string[] strDSNList = regSubKey.GetValueNames();
            foreach (string s in strDSNList)
            {
                dsnList.Add(s);
            }
            ///关闭
            regSubKey.Close();
            regRootKey.Close();

            this.comboBox1.DataSource = dsnList;
        }
        /// <summary>
        /// is_archive
        /// is_archive
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                string conStr = "DSN=LocalServer";
                SqlConnection mCn = new SqlConnection(conStr);              
                mCn.Open();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {

                string conStr = "DSN=geovindu";//uid=dba;PWD=geovindu" Driver={Sybase SQL Anywhere 5.0};
                OdbcConnection conn = new OdbcConnection(conStr);
                conn.Open();

                //OdbcConnection mCn = new OdbcConnection();
                //mCn.ConnectionString = "DSN=" + this.comboBox1.Text.Trim();
                //mCn.Open();
            }
            catch (OdbcException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

        private const string ODBC_INI_REG_PATH = "SOFTWARE\\ODBC\\ODBC.INI\\";
        private const string ODBCINST_INI_REG_PATH = "SOFTWARE\\ODBC\\ODBCINST.INI\\";

        /// <summary>
        /// Creates a new System-DSN entry with the specified values. If the DSN exists, the values are updated.
        /// </summary>
        /// <param name="dsnName">Name of the DSN for use by client applications</param>
        /// <param name="description">Description of the DSN that appears in the ODBC control panel applet</param>
        /// <param name="server">Network name or IP address of database server</param>
        /// <param name="driverName">Name of the driver to use</param>
        /// <param name="trustedConnection">True to use NT authentication, false to require applications to supply username/password in the connection string</param>
        /// <param name="database">Name of the datbase to connect to</param>
        public static void CreateDSN2(string dsnName, string description, string server, string driverName, bool trustedConnection, string database, string user, string password, string port)
        {
            // Lookup driver path from driver name
            var driverKey = Registry.LocalMachine.CreateSubKey(ODBCINST_INI_REG_PATH + driverName);
            if (driverKey == null) throw new Exception(string.Format("ODBC Registry key for driver '{0}' does not exist", driverName));
            string driverPath = driverKey.GetValue("Driver").ToString();

            // Add value to odbc data sources
            var datasourcesKey = Registry.LocalMachine.CreateSubKey(ODBC_INI_REG_PATH + "ODBC Data Sources");
            if (datasourcesKey == null) throw new Exception("ODBC Registry key for datasources does not exist");
            datasourcesKey.SetValue(dsnName, driverName);

            // Create new key in odbc.ini with dsn name and add values
            var dsnKey = Registry.LocalMachine.CreateSubKey(ODBC_INI_REG_PATH + dsnName);
            //MessageBox.Show(dsnKey.ToString());
            if (dsnKey == null) throw new Exception("ODBC Registry key for DSN was not created");
            dsnKey.SetValue("Data Source", dsnName);
            dsnKey.SetValue("Database", database);
            dsnKey.SetValue("Description", description);
            dsnKey.SetValue("Driver", driverPath);
            dsnKey.SetValue("Server", server);
            dsnKey.SetValue("User name", user);
            dsnKey.SetValue("Password", password);
            dsnKey.SetValue("Port", port);
            dsnKey.SetValue("Trusted_Connection", trustedConnection ? "Yes" : "No");
        }
    }
}

  ARSoft.Tools.Net2.2.dll  https://github.com/alexreinert/ARSoft.Tools.Net

 

相关知识

  • 我必须得告诉大家的MySQL优化原理

    说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为…

    2017/7/19 8:56:00
  • 优化SQL查询:如何写出高性能SQL语句

    1、 首先要搞明白什么叫执行计划?执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归…

    2017/7/19 8:56:00
  • memcached与redis实现的对比

    memcached和redis,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了。前两年还在学校时,我曾经读过它们的主要源码,如今写篇笔记从个人角度简单对比一下它们的实现方式,权当做复习,有理解错误之处,欢迎指正。文中使用的架构类的图片大多来自于网络,有部分图…

    2017/7/19 8:56:00
  • SQL Server Management Studio 2016 最让人兴奋的10大新功能

    介绍这篇文章列出了SQL Server Management Studio 2016已经取得的一些令人兴奋的改进。我相信,大多数新功能可以帮助我们提升工作速度,更方便地使用SSMS。1.颜色主题随着SSMS 2016的到来,现在你可以选择自己喜欢的颜色主题,类似于Visual Studio中的相似功能。你可以在两种…

    2017/7/19 8:56:00

共有访客发表了评论 网友评论

验证码: 看不清楚?