C#连接SQLServer数据库不同实例名的问题总结
C#连接SQLServer数据库方法非常简单:
private string connstr [email protected]"Data Source=.\SQLEXPRESS;Initial Catalog=DbName;Integrated Security=True";
public SqlDataReader get_reader(string str)
{
SqlDataReader dr = null;
try
{
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SqlCommand cmd = new SqlCommand(str, conn);
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch
{
return null;
}
}
另外记得导入SqlClient包:
using System.Data.SqlClient;
一直这么使用很久都没遇到问题,可是今天在一台新安装的机器上程序运行就抛异常了:
怎么也登录不了,最后判断应该是连接不上数据库,再次检查连接数据库的字符串:
private string connstr [email protected]"Data Source=.\SQLEXPRESS;Initial Catalog=DbName;Integrated Security=True";
这里有个问题:“Data Source=.\SQLEXPRESS”,也就是说数据库的实例名必须和我电脑是一样的,是默认的.\SQLEXPRESS:
但是如果安装SQLServer时候改为其他的实例名就不行了,比如是PCUSERNAME,那么就得改为Data Source=.\PCUSERNAME。
但是我们的程序总不能一个电脑一配置吧,有没有通用的设置呢?其实很简单的,只需改为“Data Source=.”就可以通用了,最终设置如下:
private string connstr [email protected]"Data Source=.;Initial Catalog=DbName;Integrated Security=True";
这样数据库就能正常读取数据了,但是当使用xsd数据集的时候,读取数据库又报错了:
看来xsd数据集还是连接默认的.\SQLEXPRESS,在哪里修改呢?需要修改app.config文件:
为了避免还有类似的地方,最好使用VS全局搜一下整个解决方案,看看还有没有.\SQLEXPRESS的地方。把搜到的地方都改为“Data Source=.”,这下程序终于使用正常了。
当然还可以用(local)或使用本机IP地址登录,首先使用SQL Server Management Studio连接到数据库,右击实例名选择“方面”:
在右侧的方面下拉框中选择“服务器配置”;将“RemoteAccessEnabled”属性改为“True”:
设置好后再打开SQL Server配置管理器:
在SQL Server网络配置中右键“TCP/IP”,点击“属性”菜单,找到IP地址为192.168.x.xxx的地方,启用它,注意TCP端口是1433:
然后启用“TCP/IP”:
最后重新启动SQL Server(SQLEXPRESS)服务:
这样使用本机IP就可以连接数据库了: