C#中使用SQLServer的方法

我是C#的初学者。对操作数据库不甚明了。请问这段asp所实现的功能,在C#中该如何实现呢?我用的是SQLServer,WinForm开发。(注意不是asp.net)rs.... 我是C#的初学者。对操作数据库不甚明了。请问这段asp所实现的功能,在C#中该如何实现呢?我用的是SQLServer,WinForm开发。(注意不是asp.net)
rs.open "Select * from BaseURI Where URI=" & URI,conn,3,3
if rs.EOF then
rs.addnew
end if
rs("URI")=URI
rs.update

也就是如何在表中查找是否有指定值的行,有就更新,没有则新建。
另外,如果程序中使用多线程,是不是可以并发访问SQLServer?还是要用到LOCK或Monitor.Enter()
非常感谢iceseaboy!感谢语写不下,所以放这了。呵呵
ADO.NET怎么这么烦琐,最少要建两个Connection,两次查询.这会不会影响性能?
另外我后面提的多线程问题还没弄明白。希望知道的朋友给我在评论里讲一下。
展开
 我来答
Baby_原來
推荐于2017-09-11 · TA获得超过3402个赞
知道大有可为答主
回答量:1535
采纳率:94%
帮助的人:495万
展开全部

1、添加引用

using System.Data.SqlClient;

2、建立连接调用

SqlConnection myConnection = new SqlConnection("数据库连接字符串");
//数据库连接字符串通常是Data Source=localhost;Initial Catalog=数据库名;User ID=用户名;Password=密码
        SqlCommand myCommand = new SqlCommand();
        myCommand.CommandText = string.Format("select count(*) from {0} where columName={1}",表明,列值);//构造SQL查询语句     String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。        myCommand.Connection = myConnection;
        
        try
        {
            myCommand.Connection.Open();
            int count = (int)myCommand.ExecuteScalar();
            if (count > 0)   
            {
          //count大于0表示有,调用自己写的一个方法来更新
                UpdateData();
                
            }
            else
            {
            小于0表示没有,调用这个方法来插入            
                InsertData();
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
//UpdateData方法    
public void UpdateData()
{
  SqlConnection myConnection = new SqlConnection("数据库连接字符串");
  SqlCommand myCommand = new SqlCommand();
  myCommand.CommandText = "用来更新的SQL语句";
  myCommand.Connection = myConnection;
  try
  {
      myCommand.Connection.Open();
      myCommand.ExecuteNonQuery();
  }
  catch (Exception ex)
  {
       Response.Write(ex.ToString());
  }
}
//InsertData方法 
public void InsertData()
{
  SqlConnection myConnection = new SqlConnection("数据库连接字符串");
  SqlCommand myCommand = new SqlCommand();
  myCommand.CommandText = "用来插入的SQL语句";
  myCommand.Connection = myConnection;
  try
  {
     myCommand.Connection.Open();
     myCommand.ExecuteNonQuery();
  }
  catch (Exception ex)
  {
     Response.Write(ex.ToString());
  }
}


-----这些都是基础的写法,可以将其封装在一个工具类中,方便调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace DBUtility
{
    public class SqlHelper
    {
        //通过配置文件(app.config:xml)读取连接字符串
        public static string connectionString = ConfigurationManager .ConnectionStrings["ConnectionString"].ConnectionString;
       
        //字段,通过连接字符串获取连接对象
        private SqlConnection con = new SqlConnection(connectionString);
        //属性,判断连接对象的状态并打开连接对象
        public SqlConnection Con
        {
            get {
                switch (con.State)
                {
                    case ConnectionState.Broken:
                        con.Close(); //先正常关闭,释放资源
                        con.Open();
                        break;
                    case ConnectionState.Closed:
                        con.Open();
                        break;
                    case ConnectionState.Connecting:
                        break;
                    case ConnectionState.Executing:
                        break;
                    case ConnectionState.Fetching:
                        break;
                    case ConnectionState.Open:
                        break;
                    default:
                        break;
                }
                return con; }
            set { con = value; }
        }
        //执行存储过程或者SQL语句并返回数据集DataSet
        public DataSet GetDataSet(string strSQL, CommandType cmdType, params SqlParameter[] values)
        {
            SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
        //执行存储过程或者SQL语句并返回SqlDatareader
        public SqlDataReader GetDataReader(string strSQL, CommandType cmdType, params SqlParameter[] values)
        {
            SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return dr;
        }
        //执行存储过程或者SQL语句并返回首行首列(新增方法的主键)
        public object ExecuteScalar(string strSQL, CommandType cmdType, params SqlParameter[] values)
        {
            SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
            return cmd.ExecuteScalar();
        }
        //执行存储过程或者SQL语句并返回受影响行数
        public int ExecuteNonQuery(string strSQL, CommandType cmdType, params SqlParameter[] values)
        {
            SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
            return cmd.ExecuteNonQuery();
        }
        //内部方法,实例化命令对象并配置相关属性
        private SqlCommand PrepareCommand(string strSQL, CommandType cmdType,params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = Con;
            cmd.CommandText = strSQL;
            cmd.CommandType = cmdType;
            cmd.CommandTimeout = 60;
            cmd.Parameters.AddRange(values);
            return cmd;
        }
    }
}
匿名用户
2006-04-13
展开全部
1、sqldmo
SQLDMO是操作SQLServer的理想的方式,如果您的数据库是SQLServer就可以考虑使用这种方式。在C#中使用SQLDMO需要添加SQLDMO的引用,然后在当前的文件中using SQLDMO;即可以使用SQLDMO。SQLDMO的对象模型大家可以在SQLServer的帮助中获得。

private void GetTabels_DMO(string strServerName,string strUser,string strPWD,string strDatabase)
{
SQLDMO.SQLServer Server = new SQLDMO.SQLServerClass();
//连接到服务器
Server.Connect(strServerName,strUser,strPWD);
//对所有的数据库遍历,获得指定数据库
for(int i=0;i<Server.Databases.Count;i++)
{
//判断当前数据库是否是指定数据库
if(Server.Databases.Item(i+1,"dbo").Name ==strDatabase)
{
//获得指定数据库
SQLDMO._Database db= Server.Databases.Item(i+1,"dbo");
//获得指定数据库中的所有表
for(int j=0;j<db.Tables.Count;j++)
{
MessageBox.Show(db.Tables.Item(j+1,"dbo").Name);

}
}
}
}

//小新技术网 xker.com

2、adox

adox是ado Extensions for DDL and Security,是微软对ADO技术的扩展,使用它我们可以操作数据库的结构。它是一个COM组件,估计以后在ADO.NET中会增加ADOX的一些功能。如果大家需要ADOX的一些资料,我可以提供。下面的一个例子就是使用ADOX来获得当前数据库的所有表。

private void GetTables_ADOX()
{
//ADO的数据库连接
ADODB.ConnectionClass cn=new ADODB.ConnectionClass();
string ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP";
cn.Open(ConnectionString,"sa","",0);
//操作ADOX的Catalog对象
CatalogClass cat=new CatalogClass();
cat.ActiveConnection=cn;
for(int i=0;i<cat.Tables.Count;i++)
{
MessageBox.Show(cat.Tables[i].Name);
}
}
注意:在上面的代码中cat.ActiveConnection不能是ADO.Net中的Connection,而应该是ADO的Connection。

3、ado.net中的oledbconnection

在c#中我们首先会考虑使用ado.net来解决问题,如果没有方法才会考虑使用adox或者sqldmo来解决这个问题。虽然adox和sqldmo也能够解决这个问题,但是他们毕竟是com组件,在.net中使用起来和在非.net平台会有一些差异,不是很顺手。下面的示例就显示了在ado.net中的oledbconnection的方法getoledbschematable来获得数据库的架构。大家可以在msdn中看到这个方法的说明:

public DataTable GetOleDbSchemaTable(
Guid schema,
object[] restrictions);
参数
schema
OleDbSchemaGuid 的值之一,它指定要返回的架构表。

restrictions
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。
返回值
包含请求的架构信息的 DataTable。
更多的信息大家可以查询MSDN,下面将示例如何实现。

private void GetTables_ADONET()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);
cn.Open();
//利用OleDbConnection的GetOleDbSchemaTable来获得数据库的结构
DataTable dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});
foreach (DataRow dr in dt.Rows)
{
MessageBox.Show((String)dr["TABLE_NAME"]);
}

}

4、信息架构视图

信息架构视图是sql-92 标准中定义的架构视图,这些视图独立于系统表。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。下面的示例使用信息架构视图来工作。

private void GetTables_INFORMATION_SCHEMA()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'",sqlcn);

SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

5、使用系统表

如果您的数据库系统是sqlserver,就可以使用如下的方式来获得当前数据库的所有表:

private void GetTables_SystemTable()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0",sqlcn);
SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

6、使用sqlserver的存储过程“sp_tables”
下面是“盛***”朋友提出的使用存储过程的方法的补充代码。

public void GetTables_StoredProcedure()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);

cn.Open();
//执行存储过程
OleDbCommand cmd=new OleDbCommand("sp_tables",cn);
cmd.CommandType=CommandType.StoredProcedure;
OleDbDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr["TABLE_NAME"].ToString());
}
}

总结:获得当前数据库中所有表的方法还不止,本人列出的这些,希望以上方法能够起到抛砖引玉的作用。以上的这些方法各有各的优缺点,希望大家能够灵活的应该,并且希望能够将发现的新的方法告知我,谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友56856e5
2006-04-13 · TA获得超过260个赞
知道答主
回答量:191
采纳率:0%
帮助的人:0
展开全部
1、sqldmo
SQLDMO是操作SQLServer的理想的方式,如果您的数据库是SQLServer就可以考虑使用这种方式。在C#中使用SQLDMO需要添加SQLDMO的引用,然后在当前的文件中using SQLDMO;即可以使用SQLDMO。SQLDMO的对象模型大家可以在SQLServer的帮助中获得。

private void GetTabels_DMO(string strServerName,string strUser,string strPWD,string strDatabase)
{
SQLDMO.SQLServer Server = new SQLDMO.SQLServerClass();
//连接到服务器
Server.Connect(strServerName,strUser,strPWD);
//对所有的数据库遍历,获得指定数据库
for(int i=0;i<Server.Databases.Count;i++)
{
//判断当前数据库是否是指定数据库
if(Server.Databases.Item(i+1,"dbo").Name ==strDatabase)
{
//获得指定数据库
SQLDMO._Database db= Server.Databases.Item(i+1,"dbo");
//获得指定数据库中的所有表
for(int j=0;j<db.Tables.Count;j++)
{
MessageBox.Show(db.Tables.Item(j+1,"dbo").Name);

}
}
}
}

//小新技术网 xker.com

2、adox

adox是ado Extensions for DDL and Security,是微软对ADO技术的扩展,使用它我们可以操作数据库的结构。它是一个COM组件,估计以后在ADO.NET中会增加ADOX的一些功能。如果大家需要ADOX的一些资料,我可以提供。下面的一个例子就是使用ADOX来获得当前数据库的所有表。

private void GetTables_ADOX()
{
//ADO的数据库连接
ADODB.ConnectionClass cn=new ADODB.ConnectionClass();
string ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP";
cn.Open(ConnectionString,"sa","",0);
//操作ADOX的Catalog对象
CatalogClass cat=new CatalogClass();
cat.ActiveConnection=cn;
for(int i=0;i<cat.Tables.Count;i++)
{
MessageBox.Show(cat.Tables[i].Name);
}
}
注意:在上面的代码中cat.ActiveConnection不能是ADO.Net中的Connection,而应该是ADO的Connection。

3、ado.net中的oledbconnection

在c#中我们首先会考虑使用ado.net来解决问题,如果没有方法才会考虑使用adox或者sqldmo来解决这个问题。虽然adox和sqldmo也能够解决这个问题,但是他们毕竟是com组件,在.net中使用起来和在非.net平台会有一些差异,不是很顺手。下面的示例就显示了在ado.net中的oledbconnection的方法getoledbschematable来获得数据库的架构。大家可以在msdn中看到这个方法的说明:

public DataTable GetOleDbSchemaTable(
Guid schema,
object[] restrictions);
参数
schema
OleDbSchemaGuid 的值之一,它指定要返回的架构表。

restrictions
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。
返回值
包含请求的架构信息的 DataTable。
更多的信息大家可以查询MSDN,下面将示例如何实现。

private void GetTables_ADONET()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);
cn.Open();
//利用OleDbConnection的GetOleDbSchemaTable来获得数据库的结构
DataTable dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});
foreach (DataRow dr in dt.Rows)
{
MessageBox.Show((String)dr["TABLE_NAME"]);
}

}

4、信息架构视图

信息架构视图是sql-92 标准中定义的架构视图,这些视图独立于系统表。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。下面的示例使用信息架构视图来工作。

private void GetTables_INFORMATION_SCHEMA()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'",sqlcn);

SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

5、使用系统表

如果您的数据库系统是sqlserver,就可以使用如下的方式来获得当前数据库的所有表:

private void GetTables_SystemTable()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0",sqlcn);
SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

6、使用sqlserver的存储过程“sp_tables”
下面是“盛***”朋友提出的使用存储过程的方法的补充代码。

public void GetTables_StoredProcedure()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);

cn.Open();
//执行存储过程
OleDbCommand cmd=new OleDbCommand("sp_tables",cn);
cmd.CommandType=CommandType.StoredProcedure;
OleDbDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr["TABLE_NAME"].ToString());
}
}

总结:获得当前数据库中所有表的方法还不止,本人列出的这些,希望以上方法能够起到抛砖引玉的作用。以上的这些方法各有各的优缺点,希望大家能够灵活的应该,并且希望能够将发现的新的方法告知我,谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友576ee9a
2006-04-15 · TA获得超过389个赞
知道小有建树答主
回答量:1684
采纳率:0%
帮助的人:652万
展开全部
我地

1、sqldmo
SQLDMO是操作SQLServer的理想的方式,如果您的数据库是SQLServer就可以考虑使用这种方式。在C#中使用SQLDMO需要添加SQLDMO的引用,然后在当前的文件中using SQLDMO;即可以使用SQLDMO。SQLDMO的对象模型大家可以在SQLServer的帮助中获得。

private void GetTabels_DMO(string strServerName,string strUser,string strPWD,string strDatabase)
{
SQLDMO.SQLServer Server = new SQLDMO.SQLServerClass();
//连接到服务器
Server.Connect(strServerName,strUser,strPWD);
//对所有的数据库遍历,获得指定数据库
for(int i=0;i<Server.Databases.Count;i++)
{
//判断当前数据库是否是指定数据库
if(Server.Databases.Item(i+1,"dbo").Name ==strDatabase)
{
//获得指定数据库
SQLDMO._Database db= Server.Databases.Item(i+1,"dbo");
//获得指定数据库中的所有表
for(int j=0;j<db.Tables.Count;j++)
{
MessageBox.Show(db.Tables.Item(j+1,"dbo").Name);

}
}
}
}

//小新技术网 xker.com

2、adox

adox是ado Extensions for DDL and Security,是微软对ADO技术的扩展,使用它我们可以操作数据库的结构。它是一个COM组件,估计以后在ADO.NET中会增加ADOX的一些功能。如果大家需要ADOX的一些资料,我可以提供。下面的一个例子就是使用ADOX来获得当前数据库的所有表。

private void GetTables_ADOX()
{
//ADO的数据库连接
ADODB.ConnectionClass cn=new ADODB.ConnectionClass();
string ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP";
cn.Open(ConnectionString,"sa","",0);
//操作ADOX的Catalog对象
CatalogClass cat=new CatalogClass();
cat.ActiveConnection=cn;
for(int i=0;i<cat.Tables.Count;i++)
{
MessageBox.Show(cat.Tables[i].Name);
}
}
注意:在上面的代码中cat.ActiveConnection不能是ADO.Net中的Connection,而应该是ADO的Connection。

3、ado.net中的oledbconnection

在c#中我们首先会考虑使用ado.net来解决问题,如果没有方法才会考虑使用adox或者sqldmo来解决这个问题。虽然adox和sqldmo也能够解决这个问题,但是他们毕竟是com组件,在.net中使用起来和在非.net平台会有一些差异,不是很顺手。下面的示例就显示了在ado.net中的oledbconnection的方法getoledbschematable来获得数据库的架构。大家可以在msdn中看到这个方法的说明:

public DataTable GetOleDbSchemaTable(
Guid schema,
object[] restrictions);
参数
schema
OleDbSchemaGuid 的值之一,它指定要返回的架构表。

restrictions
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。
返回值
包含请求的架构信息的 DataTable。
更多的信息大家可以查询MSDN,下面将示例如何实现。

private void GetTables_ADONET()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);
cn.Open();
//利用OleDbConnection的GetOleDbSchemaTable来获得数据库的结构
DataTable dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});
foreach (DataRow dr in dt.Rows)
{
MessageBox.Show((String)dr["TABLE_NAME"]);
}

}

4、信息架构视图

信息架构视图是sql-92 标准中定义的架构视图,这些视图独立于系统表。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。下面的示例使用信息架构视图来工作。

private void GetTables_INFORMATION_SCHEMA()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'",sqlcn);

SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

5、使用系统表

如果您的数据库系统是sqlserver,就可以使用如下的方式来获得当前数据库的所有表:

private void GetTables_SystemTable()
{
//打开连接
string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
sqlcn=new SqlConnection(strConnectionString);
sqlcn.Open();
//使用信息架构视图
SqlCommand sqlcmd=new SqlCommand("SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0",sqlcn);
SqlDataReader dr=sqlcmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr.GetString(0));
}
}

6、使用sqlserver的存储过程“sp_tables”
下面是“盛***”朋友提出的使用存储过程的方法的补充代码。

public void GetTables_StoredProcedure()
{
//处理OleDbConnection
string strConnectionString=@"Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
OleDbConnection cn=new OleDbConnection(strConnectionString);

cn.Open();
//执行存储过程
OleDbCommand cmd=new OleDbCommand("sp_tables",cn);
cmd.CommandType=CommandType.StoredProcedure;
OleDbDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr["TABLE_NAME"].ToString());
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友50781d7d9
推荐于2017-10-04 · 超过16用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:53.9万
展开全部
佩服啊……大家这都是哪搜索来的长篇大论……占个位子先……这就给你写代码………………

汗……忘了一点,要在页首加一个引用
using System.Data.SqlClient;
不好意思,顺便谢谢大家捧场,呵呵~
代码如下:
建立连接
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
数据库连接字符串通常是Data Source=localhost;Initial Catalog=数据库名;User ID=用户名;Password=密码
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = "select count(*) from 要查询的表名 where 查询的字段名= '"+保存查询值的变量名+"'";
myCommand.Connection = myConnection;

try
{
myCommand.Connection.Open();
int count = (int)myCommand.ExecuteScalar();
if (count > 0)
{
count大于0表示有,调用自己写的一个方法来更新
UpdateData();

}
else
{
小于0表示没有,调用这个方法来插入
InsertData();
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
UpdateData方法
public void UpdateData()
{
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = "用来更新的SQL语句";
myCommand.Connection = myConnection;
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}

InsertData方法
public void InsertData()
{
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = "用来插入的SQL语句";
myCommand.Connection = myConnection;
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}

参考资料: 原创!

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式