a.aspx =============================================================
private void Page_Load(object sender, System.EventArgs e)
{
string str =string.Empty;
DataBaseComponents.Query mydb = new TestExtraDropDownList.DataBaseComponents.Query();

SqlParameter[] prams = {mydb.MakeInParam("@user1",SqlDbType.VarChar,50,"张跃") };
str ="select * from test1 where 联系人 =@user1";
Response.Write(str);
// Response.End();
DataSet ds = mydb.RunQuery(str,prams);
Response.Write(ds.Tables[0].Rows.Count);
}
Query.cs=============================================================
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Xml;
namespace TestExtraDropDownList.DataBaseComponents
{
/// <summary>
/// 查询类.
/// </summary>
public class Query : IDisposable 
{
// 连接到数据源
private SqlConnection con;

/// <summary>
/// 执行查询.
/// </summary>
/// <param name="strSql">查询字符串.</param>
/// <returns>返回DataSet.</returns>
public DataSet RunQuery(string strSql) 
{
DataSet returnDataSet=new DataSet();
SqlCommand cmd = CreateCommand(strSql, null);
SqlDataAdapter sda=new SqlDataAdapter(cmd.CommandText,cmd.Connection);
sda.Fill(returnDataSet);
this.Close();
return returnDataSet;
}
/// <summary>
/// 执行带有参数的查询.
/// </summary>
/// <param name="strSql">查询字符串.</param>
/// <param name="prams">SQL参数.</param>
/// <returns>返回DataSet.</returns>
public DataSet RunQuery(string strSql, SqlParameter[] prams) 
{
DataSet returnDataSet=new DataSet();
SqlCommand cmd = CreateCommand(strSql, prams);
SqlDataAdapter sda=new SqlDataAdapter(cmd.CommandText,cmd.Connection);
sda.Fill(returnDataSet);
this.Close();
return returnDataSet;
}
/// <summary>
/// 执行一行的查询.
/// </summary>
/// <param name="strSql">查询字符串.</param>
/// <returns>返回一行结果.</returns>
public string  RunQueryOut(string strSql) 
{
string strReturn;
SqlCommand cmd = CreateCommand(strSql, null);
strReturn = cmd.ExecuteScalar().ToString();
this.Close();
return  strReturn;
}
/// <summary>
/// 执行带有out的查询.
/// </summary>
/// <param name="strSql">查询字符串.</param>
/// <param name="out">out参数,返回受影响行数?.</param>
/// <returns>返回一行结果.</returns>
public string  RunQueryOut(string strSql,SqlParameter[] prams,out string outReturn) 
{
string strReturn;
SqlCommand cmd = CreateCommand(strSql, prams);
strReturn = cmd.ExecuteScalar().ToString(); 
outReturn = cmd.ExecuteNonQuery().ToString();
this.Close();
return  strReturn;
}


/// <summary>
/// 生成 command .
/// </summary>
/// <param name="strSql">查询字符串.</param>
/// <param name="prams">SQL参数.</param>
/// <returns>Command object.</returns>
private SqlCommand CreateCommand(string strSql, SqlParameter[] prams) 
{
// 确保连接打开
Open(); //command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
SqlCommand cmd = new SqlCommand(strSql, con);
cmd.CommandType = CommandType.Text; // 加入SQL参数
if (prams != null) 
{
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
return cmd;
} /// <summary>
/// 打开连接.
/// </summary>
private void Open() 
{
// 打开连接
if (con == null) 
{
con = new SqlConnection(ConfigurationSettings.AppSettings["SqlConnectionString"]) ;
con.Open();
}
} /// <summary>
/// 关闭连接.
/// </summary>
public void Close() 
{
if (con != null)
con.Close();
} /// <summary>
/// 释放资源.
/// </summary>
public void Dispose() 
{
// 确保连接关闭
if (con != null) 
{
con.Dispose();
con = null;
}
} /// <summary>
/// 生成 input 参数.
/// </summary>
/// <param name="ParamName">参数名.</param>
/// <param name="DbType">参数类型.</param>
/// <param name="Size">参数大小.</param>
/// <param name="Value">参数值.</param>
/// <returns>新的参数.</returns>
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) 
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
} /// <summary>
/// 生成 input 参数.
/// </summary>
/// <param name="ParamName">参数名.</param>
/// <param name="DbType">参数类型.</param>
/// <param name="Size">参数大小.</param>
/// <returns>新参数.</returns>
public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) 
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
} /// <summary>
/// 生成参数.
/// </summary>
/// <param name="ParamName">参数名.</param>
/// <param name="DbType">参数类型.</param>
/// <param name="Size">参数大小.</param>
/// <param name="Direction">参数 direction.</param>
/// <param name="Value">参数值.</param>
/// <returns>新的参数.</returns>
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
{
SqlParameter param;
if(Size > 0)
param = new SqlParameter(ParamName, DbType, Size);
else
param = new SqlParameter(ParamName, DbType);
param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value;
return param;
}
}
}
我已经设置了参数 可总提示  必须声明变量 '@user1'。 
 很奇怪的一个问题。希望高手们能亲手试一下。

解决方案 »

  1.   

    你的用法很特别,一般人都是这样的用
    SqlParameter myParameter = new SqlParameter("@Description",SqlDbType.VarChar,11,ParameterDirection.Input,
                     true,0,0,"Description",DataRowVersion.Current,"garden hose");
      

  2.   

    有哪位高手能亲手试毫下吗,这是petShop里的数据库类啊。平时用的都没问题,
    现在用就出问题了。不清楚错在哪,逐行调试都没错,到最后就不好用,郁闷
      

  3.   

    把这两句
    SqlParameter[] prams = {mydb.MakeInParam("@user1",SqlDbType.VarChar,50,"张跃") };

    str ="select * from test1 where 联系人 =@user1";
    顺序调一下试试