取得表名,列名,列的字段类型.....
解决方案 »
- 请问如何用CodeDom编译cs文件在C#程序内使用?
- c#程序调用文本文档和WORD时总是出现乱,怎么解决?
- 如何获取到注册表中某个信息
- 急 DataGridViewCheckBoxColumn问题??
- vss 2005 internet访问问题,达人请进。
- 怎么把图片绑定到 DevExpress.XtraGrid.GridControl 控件中
- XML文档读取问题
- winform 中如何把一个文件上传到web服务器?
- 怎么是乱码?请高手指点
- c# 的一大难题? 一定加分!
- 我正在学用三层结构做c#的全站程序,想请问大侠几个问题,谢谢!
- ********* ExecuteScalar 是Command的 ,那sqlAdapter1的是什么?
m_Scon.ConnectionString =StrConn;
SqlCommand m_Scmd = new SqlCommand("sp_columns",m_Scon);
m_Scmd.CommandType = CommandType.StoredProcedure;
SqlParameter myParm = m_Scmd.Parameters.Add("@table_name",SqlDbType.VarChar,100);
myParm.Value = tree_Db.SelectedNode.Text;
m_Scon.Open();
SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
SqlDataAdapter.SelectCommand.CommandText = "select name from syscolumns where id = (select id from sysobjects where name = 表名";
ms sql server提供了一个非常方便的COM组件“SQLDMO”来帮助我们获取和管理SQL Server。在这里提供一些想法和实现。
系统要求:
windows2000server
vs.net rc3
sql server 2000
1.在.NET中使用sqldmo.dll
path :>tlbimp sqldmo.dll /out : rc3sqldmo.dll
创建一个新的C#项目(winform, library....),添加引用,选择Browse,找到rc3sqldmo.dll,加入。
2.查看rc3sqldmo.dll的结构
打开object view,选择rc3sqldmo,你能浏览所有的属性、方法和事件的定义。
3.使用rc3sqldmo
获得连接:
rc3sqldmo.sqlserver2 mysqlsvr = new rc3sqldmo.sqlserver2class();
mysqlsvr .connect("sqlservername","uid","pws"); 获得数据库信息:rc3sqldmo.databases mydbs=mysqlsvr.databases;
rc3sqldmo.database2 mydb =new rc3sqldmo.database2class();
mydb=mydbs.item("dbname","owner"); 或mydb=mysqlsvr.databases.item("dbname","owner"); 获得表和字段的信息:rc3sqldmo.Tables mytbls= mysqlsvr.databases.item("dbname","owner").tables;
rc3sqldmo.table2 mytbl = new rc3sqldmo.table2class();
mytbl = mytbls.item("tablename","owner");或
mytbl = mysqlsvr.databases.item("dbname","owner").tables.item("tablename","owner");
string[3] mylist = new string[3];
rc3sqldmo.column2 myfield = new rc3sqldmo.column2class();
foreach(object o in mytbl.columns)
{
myfield = (rc3sqldmo.column2) o;
mylist[0]=myfield.name;
mylist[1] = myfield.datatype;
mylist[2] =myfield.length.tostring();
} 获得存储过程的信息::
rc3sqldmo.storedprecudure2 mysp = new rc3sqldmo.storedprecudure2class();
mysp =mysqlsvr.batabase.itrm("dbname",owner).storedprecudures.item[B("spname",owner)]用途的讨论::动态管理sql server
动态获得table,storedprecudure的结构信息
还能增加,修改所有sql server object的内容。需要安装sql server sp3
SQLDMO.Application
SQLDMO.SQLServer
SQLDMO.Database
SQLDMO.NameList象数据备份和恢复这样的操作都有许多对象可以使用,但作为例子,我们会尽量简单,使你轻松进 入SQLDMO的世界来浏览一下它的方便性。 列出本地网络中可使用的SQL服务器相对来说比较简单,首先,你需要引用SQLDMO.Application对象,其 次,你必须建立一个SQLDMO.Application.ListAvailableSQLServers()方法的返回值的实 例SQLDMO.NameList,SQLDMO.NameList是服务器名字的COM集合。 请记住:在你习惯了调用COM对象之前,调用COM对象总是令人感到可怕的,但习惯了就会好的。下面 是一些示例代码,它利用本地可使用的SQL服务器的列表来填充下拉列表框。
//得到所有本地网络中可使用的SQL服务器列表。
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
for(int i=0;i<sqlServers.Count;i++)
{
object srv = sqlServers.Item(i + 1);
if(srv != null)
{
this.cboServers.Items.Add(srv);
}
}
if(this.cboServers.Items.Count > 0)
this.cboServers.SelectedIndex = 0;
else
this.cboServers.Text = "<No available SQL Servers>"; 正如前面所讲的,是不是很简单?请记住:COM集合的第一个项目是1,而不是0。 连接数据库并得到所有数据库的列表也是相当简单的。下面的代码采用上面下拉列表框所选择的SQL服 务器,并连接该服务器(使用文本框输入的用户名和密码),生成该服务器上数据库列表的下拉列表框。 //得到指定SQL服务器所有数据库的列表
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text);
foreach(SQLDMO.Database db in srv.Databases)
{
if(db.Name!=null)
this.cboDatabase.Items.Add(db.Name);
}要得到该库中对象的列表也是轻而易举的事,再一次连接到数据库,就可以遍历出对象的集合。 //得到所有的存储过程,所有的表放到Tables集合,所以的视图放到Views集合
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text);
for(int i=0;i<srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
{
SQLDMO._Database db= srv.Databases.Item(i+1,"dbo");
this.lstObjects.Items.Clear();
for(int j=0;j<db.StoredProcedures.Count;j++)
{
this.lstObjects.Items.Add(db.StoredProcedures.Item(j+1,"dbo").Name);
}
break;
}
}要给sql server打sp3补丁
系统表中有个sysobjects表,查询一下,你会发现里面记录的都是表的相关信息,比如一个表”UserinfoTab”,同时,通过xtype你可以判断对象类型是系统表、用户表、主键信息,这个自己去研究吧在sysobjects中对应的记录发现后,记下其id字段信息。然后,以这个ID为关键字做查询 select * from syscolumns where id='“+ID+“',然后出来的信息就是所有字段信息了,其中xtype是字段的数据类型。类型太多,我就懒得贴出来了