
使用 SQLDMO(SQL Distributed Management Objects,SQL分布式管 理对象)。
添加引用->COM里面
//得到所有本地网络中可使用的SQL服务器列表。
SQLDMOApplication sqlApp = new SQLDMOApplicationClass();
SQLDMONameList sqlServers = sqlAppListAvailableSQLServers();
for(int i=0;i<sqlServersCount;i++)
{
object srv = sqlServersItem(i + 1);
if(srv != null)
{
thiscboServersItemsAdd(srv);
}
}
if(thiscboServersItemsCount > 0)
thiscboServersSelectedIndex = 0;
else
thiscboServersText = "<No available SQL Servers>";
//得到指定SQL服务器所有数据库的列表
SQLDMOApplication sqlApp = new SQLDMOApplicationClass();
SQLDMOSQLServer srv = new SQLDMOSQLServerClass();
srvConnect(thiscboServersSelectedItemToString(),thistxtUserText,thistxtPasswordText);
foreach(SQLDMODatabase db in srvDatabases)
{
if(dbName!=null)
thiscboDatabaseItemsAdd(dbName);
}
/// <summary>
/// 获得目标服务器所有数据库名
/// </summary>
/// <param name="serverName"></param>
/// <param name="userName"></param>
/// <param name="password"></param>
public void getDataBaseNameList(string serverName, string userName, string password)
{
SQLDMOApplication sqlApplication = new SQLDMOApplicationClass();
SQLDMOSQLServer sqlServer = new SQLDMOSQLServerClass();
sqlServerConnect(serverName, userName, password); // 连接服务器
foreach (SQLDMODatabase databBase in sqlServerDatabases)
{
if (databBaseName != null)
{
thisDataBaseTreeViewNodesAdd(databBaseName);
getDataBaseTableList(serverName, userName, password, databBaseName);
}
}
}
/// <summary>
/// 加载数据库中表
/// </summary>
/// <param name="serverName">服务器名</param>
/// <param name="userName">用户名</param>
/// <param name="password">密码</param>
/// <param name="dataBaseName">数据库名</param>
private void getDataBaseTableList(string serverName, string userName, string password, string dataBaseName)
{
SQLDMOSQLServer Server = new SQLDMOSQLServerClass();
//连接到服务器
ServerConnect(serverName, userName, password);
//对所有的数据库遍历,获得指定数据库
for (int i = 0; i < ServerDatabasesCount; i++)
{
//判断当前数据库是否是指定数据库
if (ServerDatabasesItem(i + 1, "dbo")Name == dataBaseName)
{
//获得指定数据库
SQLDMO_Database db = ServerDatabasesItem(i + 1, "dbo");
//获得指定数据库中的所有表
for (int j = 0; j < dbTablesCount; j++)
{
thisDataBaseTreeViewNodes[i]NodesAdd(dbTablesItem(j + 1, "dbo")Name);
}
}
}
}
/// <summary>
/// 获得表中所有列名
/// </summary>
/// <param name="serverName">服务器名</param>
/// <param name="userName">用户名</param>
/// <param name="password">密码</param>
/// <param name="tableName">表名</param>
/// <param name="dataBaseName">数据库名</param>
/// <returns></returns>
public string getRowListFromTable(string serverName, string userName, string password, string tableName, string dataBaseName)
{
string result = stringEmpty;
string connectionString = stringEmpty;
connectionString += "server=" + serverName;
connectionString += ";Pwd=" + password;
connectionString += ";UID=" + userName;
connectionString += ";Database=" + dataBaseName;
string commandString = stringEmpty;
commandString += "select name from syscolumns where id=object_id('";
commandString += tableName;
commandString += "')";
SqlConnection sqlConnection = new SqlConnection(connectionString);
SqlCommand sqlCommand = new SqlCommand(commandString, sqlConnection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, sqlConnection);
DataSet dataSet = new DataSet();
dataAdapterFill(dataSet);
DataTable dataTable = dataSetTables[0];
// DataTable dataTable = sqlConnectionGetSchema("Tables");
foreach (DataRow row in dataTableRows)
{
result += row[0]ToString() + "-";
}
if (result != null)
{
return result;
}
else
{
return "0";
}
}
没有所谓的命名规则的,所有的机器都是一样的,可以说是随便命名,只要符合变量命名原则就可以了而你看到的服务器名称,其实是不同的实例而已一般你可能只看到一个服务器实例,有时一个服务器可能会有两个或两个实例唯一要说明的是这里的实例是服务器实例而不是数据库实例比如在SQL2000中一般要求单实例启动,启动时可以选择一个实例的如果多实例往往是SQL2005以上的版本,而且安装了其他的数据挖掘功能(BI)时的SQL服务器
而MSSSMSE只是一个管理程序,用来管理SQLserver的它可以联结服务器进行数据库的处理(当然是在GUI下),另一个是在DOS下的,所以很多企业服务器在安装时并没有安装MSSSMSE的因为你完全可以使用其他的MSSSMSE进行联结服务器的
MSSSMSE(MicrosoftSQLServerManagementStudioExpress)就是企业管理器
在企业管理器中,我们可以对SQLserver进行可视化 *** 作,但由于使用目的不同而有不同的设置其中有的SQL是为C/S服务服务的,而有些则是为B/S服务器,从开发人员的角度来考虑,SQLserver的安全不可忽视,但往往我们使用的只是开发版或是配置成开发环境的这种环境就要求我们既可能从windows进行数据库的修改 *** 作,也可以通过IIS进行SQL远程登陆 *** 作当然,如果是在本机也是有两种模式的,这是SQL的接口问题而企业管理器的登陆也提供了这种方式,这两种方式在MSSSMSE中的表示就是那个所谓的"身份验证"
如果使用windows登陆则表示的就是以当前机器或域控制用户进行验证管理的只要你有这个权限就可以了
而SQLSERVER验证则是将用户直接存在了SQL的系统数据库中,独立于windows和域控制帐户的而且这种验证将其权限进行了分级的
比如我的这个数据库是在域中,不须外网(区别于局域网)连接时,你是不愿意因为人员的流动,(公司开了一个人,他要是想报复你,在SQLserver中有一个用户)外网若可以连接,那样你的数据就完了!这种情况下可以配置为只允许windows验证登陆的,这时就算是外网使用sa用户也无足于事的
相反,若是一个局网内不须进行连接,若使用域用户或是本机用户能登陆时后果也是很严重的,你可能认为那不足为虑,事实恰恰相反,虽有可能别有用心者拿不到你的SQLserver服务器的权限,但如果拿到局网域中的任何一台机器的权限就可以让你的数据消失得无影无踪!这种情况必须控只允许使用SQL登陆的,而就是这样的服务器与只能采用SQlserver验证方式
这样的问题就出来了,若是与127001或者是(local),请问要登陆本机上哪一个服务器实例(多实例)若是在域控制下也是一样,不管你有多少台SQLserver不打出全部如何识别既就算一台也是一样的(因为域也不确信你后来加不加server,事实上域中必须是全称的)
在数据库中创建对象时,管理员也要对其进行取名
现在谈谈取名的一些技巧
一、表名大小写的控制一般情况下Oracle数据库中的表名或者列名是不区分大小写的
在创建表或者列的时候,即使管理员采用了小写的名字,数据库在将其保存到数据字典之前,会先将其转换为大写,再将他们保存到数据字典中
这也就是为什么我们取名使用小写的子母取名,但是下次查看表的名字的时候,却变成了大写
虽然说Oracle数据库中表与列等数据库对象对于大小写是不敏感的,但是如果数据库管理员确实有需要要让数据库系统对表的名字区分大小写,这也是可以做到的
通常情况下,如果把名字使用双引号括起来,则在Oracle数据字典中就会成为区分大小写的名字
不过笔者这里要提醒各位数据库管理员,虽然说从技术上可以让数据库系统强制取分大小写,但是在实际工作中,包括在内的绝大部分数据库管理员可能都不建议这么做
因为如果有混合的大小写存在,那么在引用这些表或者列名称的时候就需要特别的小心
因为即使用户或者数据库管理员有着过目不忘的本领,也很难准确的记住这些名称的大小写歌时
如果数据库管理员硬要这么做的话,那么很可能是自寻烦恼
在查询时或者其他作业时,要严格区分大小写那是一件很头疼的事情
为此,对于这个大小写的控制,笔者建议数据库管理员要谨慎使用
除非有充分的理由,否则的话,不要轻易使用这个双引号来控制大小写
这个双引号不仅可以用来控制大小写,还有一个比较特殊的作用,就是用引用一些特殊的字符
如在建立表格的时候,需要设置一个名牌号的字段
有些数据库管理员习惯使用num#类似的名称
这不会违反数据库的取名规则
不过在处理的时候会比较麻烦
如利用create语句建立表格的时候,需要给这个字段名称加上双引号
否则的话,执行这条语句的时候,数据库会拒绝执行并向用户提示错误信息
类似的特殊符号还包括一个$美元符号
他们在建立表格的时候,在语句中都需要使用双引号
不过字段建立好之后,在引用这些对象的时候,不需要使用双引号了
同理,虽然Oracle数据库支持这些特殊符号,但是笔者不鼓励数据库管理员在表或者列的取名中采取这些特殊的符号
这有可能给后续的引用带来不必要的麻烦
二、牢记取名空间在Oracle数据库中,跟其他的数据库不同,有一个叫做取名空间的概念
在同一个取名空间中,其名字不可以重复
如表与视图就共享同一个取名空间,为此就要求不仅表的名字不能够相同,而且表的名字与视图的名字也不能够相同
因为他们处于同一个取名空间
类似的,表与函数也是同处于一个表空间,为此他们也不能够同名
不过表与索引、表与约束等等却属于不同的取名空间
也就是说,表的名字可以与约束的名字相同
所以说,数据库管理员在给表等对象取名的时候,一定要了解哪些对象共享同一个名称空间
如果在同一个名称空间内的,即使对象不同(如视图与表),但是他们仍然不能够取相同的名字
为了避免同一个取名空间内重名的现象,笔者建立在取名的时候最好能够根据对象的不同加上对象的固有前缀
如大部分的数据库管理员,在给表取名的时候,一般不会表名前面加上表对象的前缀
但是在定义函数或者视图对象的时候,则会加上前缀
如在函数前面可能会加上FN的前缀,而在视图前面可能会加上vi的前缀
如此的话,在同一个取名空间内也不用担心对象重名的问题
不过无论怎么说,这个取名空间的概念数据库管理员必须牢记
即使在实际的工作中,可以通过前缀等手段轻易的避免这个陷阱,但是在Oracle数据库管理员的认证考试中,这个取名空间也是一个必要的知识点
所以无论从实际的工作还是认证考试的需要,对于这个取名空间管理员都必须要有一个清晰的认识
三、在表、索引、约束、列之间设置密切的联系在创建表的同时,可以给表中的某些列添加索引、约束等等
如在员工信息表中,会设置员工编号唯一性约束
在创建约束的时候,也需要对约束进行取名
虽然说也约束与表、列不属于同一个取名空间,所以在取名的时候基本上没有限制
但是为了后续使用的方便,笔者对约束的取名还有一个小小的建议
简单的说,就是给一个与表直接有关的其他对象具有该表的名字是一种好的做法
如现在有一张用户表名字叫做ad_user(在表名前面一般不加对象名,但是可以根据应用软件的模块设计加上模块的前缀),这种表中有一个字段叫做叫做vlaue,用来存储员工的编号
在表设计的时候,需要给这个字段加一个索引
那么这个索引的名字就可以取名为IDX_USER_VALUE(也就是索引前缀表名字段名的形式)
这么做有什么好处呢一是可以确保相关对象的名字不会重复
因为表的名字不会重复,所以将表的名字与列的名字一起组成某个对象的名字,那么其重复的几率可以说基本上没有
二是方便管理员阅读、理解、维护等等
一看到索引或者约束对象的名字时,就可以看到这个是索引或者约束是用在哪个表的那个字段上的
而且也可以知道这个约束是唯一性约束还是检查约束;索引时主键索引还是外键索引
给数据库管理员一目了然的感觉
这对于后续的维护、升级、调整、引用等等都提供了方便
虽然说Oracle数据库中表与列等数据库对象对于大小写是不敏感的,但是如果数据库管理员确实有需要要让数据库系统对表的名字区分大小写,这也是可以做到的
通常情况下,如果把名字使用双引号括起来,则在Oracle数据字典中就会成为区分大小写的名字
不过笔者这里要提醒各位数据库管理员,虽然说从技术上可以让数据库系统强制取分大小写,但是在实际工作中,包括在内的绝大部分数据库管理员可能都不建议这么做
因为如果有混合的大小写存在,那么在引用这些表或者列名称的时候就需要特别的小心
因为即使用户或者数据库管理员有着过目不忘的本领,也很难准确的记住这些名称的大小写歌时
如果数据库管理员硬要这么做的话,那么很可能是自寻烦恼
在查询时或者其他作业时,要严格区分大小写那是一件很头疼的事情
为此,对于这个大小写的控制,笔者建议数据库管理员要谨慎使用
除非有充分的理由,否则的话,不要轻易使用这个双引号来控制大小写
首先你得创建一个数据库。
然后添加数据库用户名、密码和所建立的数据库名字。
也有可能是你的网站不支持远程连接,那么你可以自己添加到wordpress的wp-configphp里面。
再运行安装。
以上就是关于C# 如何获取本地数据库SQL Server的数据库服务器名称和数据库名称然后连接,代码怎么写全部的内容,包括:C# 如何获取本地数据库SQL Server的数据库服务器名称和数据库名称然后连接,代码怎么写、winform如何拿到一个服务器中所有数据库名称、怎么得到本地(本机)的SQL服务器名称(sqlserver本地服务器地址如何查看)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)