转载MSDN中的SqlConnection.ConnectionString

日期:2004年7月9日 星期五 天气:晴朗 作者:痴儿
整理MSDN中的SqlConnection.ConnectionString 属性
发表:2004-7-9 9:31:33 出处: 你的博客网(yourblog.org)
MSDN中文版中,阿很多不该翻译的翻译了,或者翻译的有问题。我在参阅英文版MSDN和中文版MSDN基础上,跟据自己的经验,把数据库连接字符串整理了一下,具体如下:

英文版可以看以下地址:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp

SqlConnection.ConnectionString 属性
ConnectionString 类似于 OLE DB 连接字符串,但并不相同。与 OLE DB 或 ADO 不同,如果“Persist Security Info ”值设置为 false(默认值),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。除非将“Persist Security Info ”设置为 true,否则,SQL Server .NET Framework 数据提供程序将不会保持,也不会返回连接字符串中的密码。

可以使用 ConnectionString 属性连接到数据库。下面的示例阐释了一个典型的连接字符串。

"Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer"

只有在连接关闭时才能设置 ConnectionString 属性。许多连接字符串值都具有相应的只读属性。当设置连接字符串时,将更新所有这些属性(除非检测到错误)。检测到错误时,不会更新任何属性。SqlConnection 属性只返回那些包含在 ConnectionString 中的设置。

若要连接到本地机器,请将服务器指定为“(local)”。(必须始终指定一个服务器。)

重置已关闭连接上的 ConnectionString 会重置包括密码在内的所有连接字符串值(和相关属性)。例如,如果设置一个连接字符串,其中包含“Database= northwind”,然后再将该连接字符串重置为“Data Source=myserver;Integrated Security=SSPI”,则 Database 属性将不再设置为 Northwind。

在设置后会立即分析连接字符串。如果在分析时发现语法中有错误,则产生运行库异常,如 ArgumentException。只有当试图打开连接时,才会发现其他错误。

连接字符串的基本格式包括一系列由分号分隔的关键字/值对。等号 (=) 连接各个关键字及其值。若要包括含有分号、单引号字符或双引号字符的值,则该值必须用双引号括起来。如果该值同时包含分号和双引号字符,则该值可以用单引号括起来。如果该值以双引号字符开始,则还可以使用单引号。相反地,如果该值以单引号开始,则可以使用双引号。如果该值同时包含单引号和双引号字符,则用于将值括起来的引号字符每次出现时,都必须成对出现。

若要在字符串值中包括前导或尾随空格,则该值必须用单引号或双引号括起来。即使将整数、布尔值或枚举值用引号括起来,其周围的任何前导或尾随空格也将被忽略。然而,保留字符串关键字或值内的空格。使用 .NET Framework 1.1 版时,在连接字符串中可以使用单引号或双引号而不用使用分隔符(例如,Data Source= my’Server 或 Data Source= my"Server),但引号字符不可以为值的第一个或最后一个字符。

若要在关键字或值中包括等号 (=),则它之前必须还有另一个等号。例如,在假设的连接字符串中,

"key==word=value"

关键字是“key=word”并且值是“value”。

如果“keyword= value”对中的一个特定关键字多次出现在连接字符串中,则将所列出的最后一个用于值集。

关键字不区分大小写。

下表列出了 ConnectionString 中的关键字值的有效名称。

名称 默认值 说明
Application Name   应用程序的名称,如果不提供应用程序名称,默认是:“.Net SqlClient Data Provider”
AttachDBFilename
- 或 -
extended properties
- 或 -
Initial File Name    可连接数据库的主文件的名称,包括完整的路径名。
必须使用关键字“database”来指定数据库的名称。

Connect Timeout
- 或 -
Connection Timeout
15 在终止尝试连接并产生错误之前,等待与服务器的连接的时间长度(以秒为单位)。
Current Language   SQL Server 语言
Data Source
- 或 -
Server
- 或 -
Address
- 或 -
Addr
- 或 -
Network Address
   要连接的 SQL Server 实例的名称或网络地址。
Encrypt ’false’ 当该值为 true 时,如果服务器端安装了证书,则 SQL Server 将对所有在客户端和服务器之间传送的数据使用 SSL 加密。可识别的值为 true、false、yes 和 no。
Initial Catalog
- 或 -
Database
   数据库的名称。
Integrated Security
- 或 -
Trusted_Connection
’false’ 当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。
可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。

Network Library
- 或 -
Net
’dbmssocn’ 用于建立与 SQL Server 实例的连接的网络库。支持的值包括 dbnmpntw(命名管道)、dbmsrpcn(多协议)、dbmsadsn (Apple Talk)、dbmsgnet (VIA)、dbmslpcn(共享内存)及 dbmsspxn (IPX/SPX) 和 dbmssocn (TCP/IP)。
相应的网络 DLL 必须安装在要连接的系统上。如果不指定网络而使用一个本地服务器(比如“.”或“(local)”),则使用共享内存。

Packet Size 8192 用来与 SQL Server 的实例进行通讯的网络数据包的大小,以字节为单位。
Password
- 或 -
Pwd
   SQL Server 帐户登录的密码(建议不要使用。为了维护最高级别的安全性,强烈建议改用 Integrated Security 或 Trusted_Connection 关键字)。
Persist Security Info ’false’ 当该值设置为 false 或 no(强烈推荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感信息(如密码)将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为 true、false、yes 和 no。
User ID   SQL Server 登录帐户(建议不要使用。为了维护最高级别的安全性,强烈建议改用 Integrated Security 或 Trusted_Connection 关键字)。
Workstation ID 本地计算机名称 连接到 SQL Server 的工作站的名称。


下表列出了 ConnectionString 内连接池值的有效名称。有关连接池的更多信息,请参见 SQL Server .NET Framework 数据提供程序连接池。

名称 默认值 说明
Connection Lifetime 0 当连接被返回到池时,将其创建时间与当前时间作比较,如果时间长度(以秒为单位)超出了由 Connection Lifetime 指定的值,该连接就会被销毁。这在聚集配置中很有用(用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡)。
零 (0) 值将使池连接具有最大的连接超时。

Connection Reset ’true’ 确定从池中提取数据库连接时是否重置数据库连接。对于 Microsoft SQL Server 7.0 版,设置为 false 可避免获取连接时再有一次额外的服务器往返行程,但须注意此时并未重置连接状态(如数据库上下文)。
Enlist ’true’ 当该值为 true 时,池程序在创建线程的当前事务上下文中自动登记连接。可识别的值为 true、false、yes 和 no。
Max Pool Size 100 池中允许的最大连接数。
Min Pool Size 0 池中允许的最小连接数。
Pooling ’true’ 当该值为 true 时,系统将从相应池中提取 SQLConnection 对象,或在必要时创建该对象并将其添加到相应池中。可识别的值为 true、false、yes 和 no。


当设置需要布尔值的关键字或连接池值时,您可以使用 ’yes’ 代替 ’true’,’no’ 代替 ’false’。整数值表示为字符串。

注意   SQL Server .NET Framework 数据提供程序使用它自己的协议与 SQL Server 进行通信。因此,当连接到 SQL Server 时,它不支持 ODBC 数据源名称 (DSN) 的使用,因为它不添加 ODBC 层。 警告   在此版本中,在应用程序中根据用户输入构造连接字符串时(例如,从对话框中检索用户 ID 和密码信息并将其追加到连接字符串时)应相当谨慎。应用程序应确保用户无法在这些值中嵌入额外的连接字符串参数(例如,输入“validpassword;database=somedb”作为密码,以试图连接到其他数据库)。

示例
[Visual Basic, C#] 下面的示例创建一个 SqlConnection并设置它的一些属性。

[Visual Basic]
Public Sub CreateSqlConnection()
    Dim myConnection As New SqlConnection()
    myConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30"
    myConnection.Open()
End Sub ’CreateSqlConnection

[C#]
public void CreateSqlConnection()
{
    SqlConnection myConnection = new SqlConnection();
    myConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30";
    myConnection.Open();
}  
#region 新增异常信息 /// <summary> /// 新增异常信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ToolStripButtonInsertInfo_Click(object sender, EventArgs e) { TrafficCenter.Instance.skin.SkinAllForm = false; string site = "";//站点信息 string equipment = "";//设备信息 string component = "";//元器件信息 string operatorInfo = "";//操作人信息 string isReplace = "";//是否进行了更换 string errorInfo = "";//故障信息 string reason = "";//故障原因 string solution = "";//对策 var sheet1 = SelectDeviceInfosheetStep1(); //如果选择了站点信息 if (sheet1 != null) { site = sheet1["站点信息"].Data.ToString(); var sheet2 = SelectDeviceInfosheetStep2(site); //如果选择了设备信息 if (sheet2 != null) { equipment = sheet2["设备名称"].Data.ToString(); var sheet3 = SelectDeviceInfosheetStep3(site, equipment); //如果选择了元器件信息 if (sheet3 != null) { component = sheet3["元器件信息"].Data.ToString(); var sheet4 = InsertErroeInfo(site, equipment, component); //如果点击完成了异常信息的录入 if (sheet4 != null) { operatorInfo = sheet4["操作人(请输入工号)"].Data.ToString(); isReplace = sheet4["是否进行了更换"].Data.ToString(); errorInfo = sheet4["故障信息"].Data.ToString(); reason = sheet4["故障原因"].Data.ToString(); solution = sheet4["对策"].Data.ToString(); using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); Console.WriteLine("连接成功!"); Thread.Sleep(500); using (SqlCommand sqlCommand = new SqlCommand("INSERT INTO EquipmentAbnormalCondition(Sites,Equipment,Components,Operator,IsReplacement,FaultInformation,Reasons,Countermeasures) VALUES(@Sites,@Equipment,@Components,@Operator,@IsReplace,@ErrorInfo,@Reason,@Solution)", conn)) { //添加参数 sqlCommand.Parameters.AddWithValue("@Sites", site); sqlCommand.Parameters.AddWithValue("@Equipment", equipment); sqlCommand.Parameters.AddWithValue("@Components", component); sqlCommand.Parameters.AddWithValue("@Operator", operatorInfo); sqlCommand.Parameters.AddWithValue("@IsReplace", isReplace); sqlCommand.Parameters.AddWithValue("@ErrorInfo", errorInfo); sqlCommand.Parameters.AddWithValue("@Reason", reason); sqlCommand.Parameters.AddWithValue("@Solution", solution); sqlCommand.ExecuteNonQuery(); } conn.Close(); Invoke(new Action(() => { MessageBox.Show("异常信息上传成功!"); })); } } } } } TrafficCenter.Instance.skin.SkinAllForm = true; } /// <summary> /// 异常数据上传时选择站点信息 /// </summary> /// <returns></returns> private DataEntrySheet SelectDeviceInfosheetStep1() { DataEntrySheet sheet = new DataEntrySheet(); using (SqlConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); using (SqlCommand sqlCommand = new SqlCommand("SELECT DISTINCT Sites FROM DeviceInformation", connection)) { using (SqlDataReader reader = sqlCommand.ExecuteReader()) { List<string> stations = new List<string>(); while (reader.Read()) { stations.Add(reader["Sites"].ToString()); } sheet.AddComboBoxField(new ComboBoxField() { Title = "站点信息", Items = stations.ToArray()// 设置ComboBox的Items属性 }); } } connection.Close(); } var dialog = provider.CreateDataEntrySheetDialog(sheet, s => { s.Title = "故障信息维护"; // 是否可取消 s.Cancelable = true; // 确认按钮文本 s.ConfirmOption.Text = "下一步"; // 取消按钮文本 s.CancelOption.Text = "取消"; }); dialog.Show(); if (dialog.Result.IsCancel) { return null; } return sheet; } /// <summary> /// 异常数据上传时选择设备信息 /// </summary> /// <param name="site"></param> /// <returns></returns> private DataEntrySheet SelectDeviceInfosheetStep2(string site) { DataEntrySheet sheet = new DataEntrySheet(); using (SqlConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); using (SqlCommand sqlCommand = new SqlCommand("SELECT DISTINCT Equipment FROM DeviceInformation WHERE Sites = @Site", connection)) { sqlCommand.Parameters.AddWithValue("@Site", site); using (SqlDataReader reader = sqlCommand.ExecuteReader()) { List<string> stations = new List<string>(); while (reader.Read()) { stations.Add(reader["Equipment"].ToString()); } //显示站点信息的文本框 sheet.AddTextField(new TextField() { Title = "站点名称", Data = site }); sheet.AddComboBoxField(new ComboBoxField() { Title = "设备名称", Items = stations.ToArray()// 设置ComboBox的Items属性 }); } } connection.Close(); } var dialog = provider.CreateDataEntrySheetDialog(sheet, s => { s.Title = "故障信息维护"; // 是否可取消 s.Cancelable = true; // 确认按钮文本 s.ConfirmOption.Text = "下一步"; // 取消按钮文本 s.CancelOption.Text = "取消"; }); dialog.Show(); if (dialog.Result.IsCancel) { return null; } return sheet; } /// <summary> /// 异常数据上传时选择元器件信息 /// </summary> /// <param name="site"></param> /// <param name="equipment"></param> /// <returns></returns> private DataEntrySheet SelectDeviceInfosheetStep3(string site, string equipment) { DataEntrySheet sheet = new DataEntrySheet(); using (SqlConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); using (SqlCommand sqlCommand = new SqlCommand("SELECT DISTINCT Components FROM DeviceInformation WHERE Sites = @Site AND Equipment = @Equipment", connection)) { sqlCommand.Parameters.AddWithValue("@Site", site); sqlCommand.Parameters.AddWithValue("@Equipment", equipment); using (SqlDataReader reader = sqlCommand.ExecuteReader()) { List<string> stations = new List<string>(); while (reader.Read()) { stations.Add(reader["Components"].ToString()); } //显示站点信息的文本框 sheet.AddTextField(new TextField() { Title = "站点名称", Data = site }); //显示设备信息的文本框 sheet.AddTextField(new TextField() { Title = "设备名称", Data = equipment }); sheet.AddComboBoxField(new ComboBoxField() { Title = "元器件信息", Items = stations.ToArray()// 设置ComboBox的Items属性 }); } } connection.Close(); } var dialog = provider.CreateDataEntrySheetDialog(sheet, s => { s.Title = "故障信息维护"; // 是否可取消 s.Cancelable = true; // 确认按钮文本 s.ConfirmOption.Text = "下一步"; // 取消按钮文本 s.CancelOption.Text = "取消"; }); dialog.Show(); if (dialog.Result.IsCancel) { return null; } return sheet; } /// <summary> /// 输入异常信息 /// </summary> /// <param name="site"></param> /// <param name="equipment"></param> /// <param name="component"></param> /// <returns></returns> private DataEntrySheet InsertErroeInfo(string site, string equipment, string component) { DataEntrySheet sheet = new DataEntrySheet(); //显示站点信息的文本框 sheet.AddTextField(new TextField() { Title = "站点名称", Data = site }); //显示设备信息的文本框 sheet.AddTextField(new TextField() { Title = "设备名称", Data = equipment }); //显示元器件信息的文本框 sheet.AddTextField(new TextField() { Title = "元器件名称", Data = component }); sheet.AddTextField(new TextField() { Title = "操作人(请输入工号)" }); sheet.AddComboBoxField(new ComboBoxField() { Title = "是否进行了更换", Items = new string[] { "是", "否" } }); sheet.AddTextField(new TextField() { Title = "故障信息", IsMultiline = true }); sheet.AddTextField(new TextField() { Title = "故障原因", IsMultiline = true }); sheet.AddTextField(new TextField() { Title = "对策", IsMultiline = true }); var dialog = provider.CreateDataEntrySheetDialog(sheet, s => { s.Title = "故障信息维护"; // 是否可取消 s.Cancelable = true; // 确认按钮文本 s.ConfirmOption.Text = "上传"; // 取消按钮文本 s.CancelOption.Text = "取消"; //窗口大小 s.DialogSize = new Size(500, 600); }); dialog.Show(); if (dialog.Result.IsCancel) { return null; } return sheet; } #endregion 帮我将四个临时窗口合成一个,要求功能一致
最新发布
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值