Parameters.Add方法和using System.Data.SqlClient; using System.Data.Common;的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Parameters.Add方法和using System.Data.SqlClient; using System.Data.Common;的关系相关的知识,希望对你有一定的参考价值。
当我用using System.Data.Common引用的时候
comm.Parameters.Add(new DbParameter("@ForumID",DbType.String));
comm.Parameters["@ForumID"].Value = value;
报CS0144: 无法创建抽象类或接口“System.Data.Common.DbParameter”的实例错误
当我用using System.Data.SqlClient引用的时候
comm.Parameters.Add(new SqlParameter("@ForumID",SqlDbType.NVarChar,30));
comm.Parameters["@ForumID"].Value = id;
却可以正常运行.
使用using System.Data.Common是可以让程序更具健壮性.可为什么代码写到这里就不行了.DbType.String这一块也不能制定字符创的大小也是因为个个数据库不同的关系.
那如果必须要用common该怎么处理
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Common;
using System.Collections.Generic;
namespace Maticsoft.DBUtility
/// <summary>
/// 数据访问抽象基础类
/// Copyright (C) 2004-2008 By Maticsoft
/// </summary>
public abstract class DbHelperSQL
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString = PubConstant.ConnectionString;
public DbHelperSQL()
#region 公用方法
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="columnName">列名称</param>
/// <returns>是否存在</returns>
public static bool ColumnExists(string tableName, string columnName)
string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
object res = GetSingle(sql);
if (res == null)
return false;
return Convert.ToInt32(res) > 0;
public static int GetMaxID(string FieldName, string TableName)
string strsql = "select max(" + FieldName + ")+1 from " + TableName;
object obj = DbHelperSQL.GetSingle(strsql);
if (obj == null)
return 1;
else
return int.Parse(obj.ToString());
public static bool Exists(string strSql)
object obj = DbHelperSQL.GetSingle(strSql);
int cmdresult;
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
cmdresult = 0;
else
cmdresult = int.Parse(obj.ToString());
if (cmdresult == 0)
return false;
else
return true;
/// <summary>
/// 表是否存在
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public static bool TabExists(string TableName)
string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
//string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
object obj = DbHelperSQL.GetSingle(strsql);
int cmdresult;
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
cmdresult = 0;
else
cmdresult = int.Parse(obj.ToString());
if (cmdresult == 0)
return false;
else
return true;
public static bool Exists(string strSql, params SqlParameter[] cmdParms)
object obj = DbHelperSQL.GetSingle(strSql, cmdParms);
int cmdresult;
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
cmdresult = 0;
else
cmdresult = int.Parse(obj.ToString());
if (cmdresult == 0)
return false;
else
return true;
#endregion
#region 执行简单SQL语句
/// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString)
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
try
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
catch (System.Data.SqlClient.SqlException e)
connection.Close();
throw e;
public static int ExecuteSqlByTime(string SQLString, int Times)
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
try
connection.Open();
cmd.CommandTimeout = Times;
int rows = cmd.ExecuteNonQuery();
return rows;
catch (System.Data.SqlClient.SqlException e)
connection.Close();
throw e;
/// <summary>
/// 执行Sql和Oracle滴混合事务
/// </summary>
/// <param name="list">SQL命令行列表</param>
/// <param name="oracleCmdSqlList">Oracle命令行列表</param>
/// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>
public static int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList)
using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
foreach (CommandInfo myDE in list)
string cmdText = myDE.CommandText;
SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
PrepareCommand(cmd, conn, tx, cmdText, cmdParms);
if (myDE.EffentNextType == EffentNextType.SolicitationEvent)
if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
tx.Rollback();
throw new Exception("违背要求"+myDE.CommandText+"必须符合select count(..的格式");
//return 0;
object obj = cmd.ExecuteScalar();
bool isHave = false;
if (obj == null && obj == DBNull.Value)
isHave = false;
isHave = Convert.ToInt32(obj) > 0;
if (isHave)
//引发事件
myDE.OnSolicitationEvent();
if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
tx.Rollback();
throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");
//return 0;
object obj = cmd.ExecuteScalar();
bool isHave = false;
if (obj == null && obj == DBNull.Value)
isHave = false;
isHave = Convert.ToInt32(obj) > 0;
if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
tx.Rollback();
throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");
//return 0;
if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
tx.Rollback();
throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");
//return 0;
continue;
int val = cmd.ExecuteNonQuery();
if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
tx.Rollback();
throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");
//return 0;
cmd.Parameters.Clear();
string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");
bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);
if (!res)
tx.Rollback();
throw new Exception("Oracle执行失败");
// return -1;
tx.Commit();
return 1;
catch (System.Data.SqlClient.SqlException e)
tx.Rollback();
throw e;
catch (Exception e)
tx.Rollback();
throw e;
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static int ExecuteSqlTran(List<String> SQLStringList)
using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
int count = 0;
for (int n = 0; n < SQLStringList.Count; n++)
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1)
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
tx.Commit();
return count;
catch
tx.Rollback();
return 0;
/// <summary>
/// 执行带一个存储过程参数的的SQL语句。
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString, string content)
using (SqlConnection connection = new SqlConnection(connectionString))
SqlCommand cmd = new SqlCommand(SQLString, connection);
System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
myParameter.Value = content;
cmd.Parameters.Add(myParameter);
try
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
catch (System.Data.SqlClient.SqlException e)
throw e;
finally
cmd.Dispose();
connection.Close();
本回答被提问者采纳
以上是关于Parameters.Add方法和using System.Data.SqlClient; using System.Data.Common;的关系的主要内容,如果未能解决你的问题,请参考以下文章
SqlCommand 参数 Add 与 AddWithValue [重复]
下面c#程序有啥问题,应该怎么修改?谢谢了 using System; using System.Collections.Generic; using Sy
MySqlCommand Command.Parameters.Add 已过时