有一个C/S的程序,要访问很多次数据库,我在数据库里写好存储过程了,想在C#里建一个函数,传入存储过程名,参数名,参数值,然后函数就执行数据库连接,执行存储过程,最后返回一个dataset,但是查询的参数不一定,有的没有参数,有的可能有5,6个参数,这个函数怎么写呢,难道要我写5,6个函数
解决方案 »
- 我遇到一个有趣的问题!!大家进来看看!!尼玛????
- GPIB无法读取设备的值。
- 关于验证的问题。
- WinForm寻求解决方案
- 请教高手啊!!listview提取数据,参数超出有效值
- 取string 中字符的问题。
- 请问如何让winform下的gridview中的某些文字带颜色,谢谢
- 在一个web页面里有一个Table表,这个表中有很多的记录,我想在每5行记录后面空上一行,这在怎么写代码啊!
- C/S结构的程序怎么做webservice
- 序列化问题
- 我学习使用vs2008三个多月了,我从不使用委托,也没有发现我的C#程序不正常,自己在C#中做软件不主动使用委托到底行不行。
- 关于学好专业技术的基本功?
string sql="select * from yourtable where 1=1";
if(str1!="") sql+=" and fieldname1='"+str1+"'";
if(......)
......
If cnn.State = ConnectionState.Closed Then
cnn.Open()
End If
Dim cmd As New SqlCommand(procname, cnn)
cmd.CommandType = CommandType.StoredProcedure If Not (prams Is DBNull.Value) Then
Dim parameter As SqlParameter
cmd.Parameters.Clear()
For Each parameter In prams cmd.Parameters.Add(parameter)
Next
End If
cmd.Parameters.Add(New SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, False, 0, 0, String.Empty, DataRowVersion.Default, System.DBNull.Value))
Return cmd
End Function
public void yourMath(string 1,string 2,,,,,)
{}
个人认为可以在存储过程里做文章,你可以把存储过程中的参数,在里面肯定是条件了,
例如: select ....where 1=1 and name = @name and age=@age定几个变量 daclare strName = 'and name = @name' 如果 @name 为空,那么strName =''
那么上面SQL语句就可以这么写select ....where 1=1 +'strName'+ '+strAge+' 运行时 是空就当‘’了。个人的一点看法,具体实施还看你程序的复杂程度。
并做了简化(连接SQL Server 2000 or 2005)
public DataSet GetProcDataSet(string procName, string connStr)
{
return GetProcDataSet(procName, null, connStr);
} public DataSet GetProcDataSet(string procName, SqlParameter[] parms, string connStr)
{
try
{
DataSet ds = new DataSet();
using( SqlConnection connection = new SqlConnection(connStr) )
{
SqlCommand command = new SqlCommand(procName, connection);
if ( parms != null )
{
command.Parameters.AddRange(parms);
}
commmand.CommandType = CommandType.StoredProcedure
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
connection.Close();
}
return ds;
}
catch(Exception ex)
{
throw ex;
}
}
使用示例: public void test()
{
string connStr = "Server=.;Database=xxx;Integrated Security=true;";
string procName = "MyProcedure"; // 存储过程名称
SqlParameter[] parms = new SqlParameter[]
{
new SqlParameter("@param1", 10), // 参数名称请修改为存储过程的参数名称
new SqlParameter("@param2", 20), // 同上
new SqlParameter("@param3", 30) // 同上
} DataSet ds = GetProcDataSet(procName, parms, connStr); return;
}
在cmd.sqlparameters多了是没事的,但是少了却不行.
参数不是重要的,不管理是存储过程还是SQL语句,最后还是拼接字符串来执行一个MDL语句.
第二种就是,Dictionary作为参数,传进去的是参数对应的值和类型,在方法体里面去创建SqlParameter