您的位置:首页 > 数据库

c#.NET 连接 SQLServer 的代码和遇到的问题

2010-04-08 15:51 561 查看
首先申明,本人编程菜鸟,本文只是自己的一个总结,各位看客莫笑!

今天闲来无事,写了一段C#.NET 连接 SQLServer 的代码, 写的过程中查找了一些资料,并遇到了一些问题,



闲话少说,先上代码。




using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Test
{
    public class DBConnection
    {
        public static void getDBData(out List<string[]> rsltList)
        {
            rsltList = new List<string[]>();
            SqlConnection objConnection = null;
            try
            {
                string strConnection = "Persist Security Info=False;user id=myID;password=myPWD;initial catalog=northwind;Server=mySQLServer;Connect Timeout=30";
                // myID就是用户名
                // myPWD就是密码
                // northwind为你要使用的数据源,也就是说你要的数据库的名称·
                // 数据库所在服务器(可以写IP地址)
                objConnection = new SqlConnection(strConnection);
                objConnection.Open();
                // table_a为检索的表
                SqlCommand objsql = new SqlCommand("select * from table_a");
                objsql.Connection = objConnection;
                SqlDataReader myreader = objsql.ExecuteReader();
                while (myreader.Read())
                {
                    string[] str = new string[6];
                    // 下面一堆为table_a表里面的字段
                    str[0] = myreader.GetString(myreader.GetOrdinal("BookNumber"));
                    str[1] = myreader.GetString(myreader.GetOrdinal("BookName"));
                    str[2] = myreader.GetString(myreader.GetOrdinal("Publisher"));
                    str[3] = myreader.GetString(myreader.GetOrdinal("Buyday"));
                    str[4] = myreader.GetString(myreader.GetOrdinal("Country"));
                    str[5] = myreader.GetString(myreader.GetOrdinal("Field"));
                    rsltList.Add(str);
                }
            }
            finally
            {
                objConnection.Close();
            }
        }
    }
}




1,string strConnection = "Persist Security Info=False;user id=myID;password=myPWD;initial catalog=northwind;Server=mySQLServer;Connect Timeout=30";

这一段应该就是连接DB之前的一些设定了。

包括了用户名,密码,数据库名,服务器地址等等。

如果你的SQL Server设置为Windows登录,那么在这里就不需要使用“user id”和“password”这样的方式来登录,而需要使用“Trusted_Connection=SSPI”来进行登录。


代码如下: string strConnection = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30";

PS:Persist Security Info=False 是什么意思?(具体上google看看)

Persist Security
Info属性的意思是表示是否保存安全信息,其实可以简单的理解为"ADO在数据库连接成功后是否保存密码信息",

True表示保存,False表示不保存。



2,写代码中遇到了2个问题

a问题:

System.InvalidOperationException

是 ServerVersion = 'objConnection.ServerVersion' 的例外。

具体内容是: 操作无效,接续处于关闭状态。

但是这个exception没有被throw出来,等到objConnection.Open() 被执行之后,

ServerVersion 就显示出来了。

仔细想想,这个应该不算exception吧?

因为你都还没有open,人家当然会报 “操作无效,接续处于关闭状态”这个“警告”啦!(猜想,呵呵,不要砸我!)




b问题:

ExecuteReader: Connection 属性没有被初期化

于是加上: objsql.Connection = objConnection

问题得以解决。

仔细想想,不然一个sqlcommand怎么知道我用的是哪个connection,取的是哪个DB啊?!



有时候代码看着挺简单,可是就这么几句代码写起来还碰到好几个问题呢。

只是果然是在于积累啊!

以后就记住了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐