1

我想以与在 SQL IDE 中相同的方式执行 Sybase 存储过程,即在 SQL 中是这样的:

exec sp_GetCMyDataPerRegion JAPAN'

但是,不是这样,在 C# 代码中,我被迫单独定义每个参数,每个参数都定义了所有这些类型:

AseCommand command = new AseCommand(spName, DbConnection);
command.CommandType = CommandType.StoredProcedure;

AseParameter param = command.CreateParameter();
param.ParameterName = "@region";
param.AseDbType = AseDbType.VarChar;
param.Direction = ParameterDirection.Input;
param.Value = myValue;
command.Parameters.Add(param);

相当痛苦,到目前为止还没有找到“通用”,即只想将存储过程调用包装在具有这种签名的方法中:

public AseDataReader ExecuteStoredProcedure(string spExecutionString){}

你有什么办法吗?

先感谢您!

4

1 回答 1

1

我确实有一个函数调用是 SqlDataReader 的示例

ExecuteNonQuery("dbo.[Sp_Skp_UpdateFuncties]", parameters);

这是在保存数据库连接字符串的类 DataBaseManager 中

public classDataBaseManager
{
...
public int ExecuteStoredProcedure(string storedprocedureNaam, IEnumerable<KeyValuePair<string, object>> parameters)
{
    var sqlCommand = new SqlCommand
    {
        Connection = DatabaseConnectie.SqlConnection,
        CommandType = CommandType.StoredProcedure,
        CommandText = storedprocedureNaam,
    };

    foreach (KeyValuePair<string, object> keyValuePair in parameters)
    {
        sqlCommand.Parameters.Add(
            new SqlParameter { ParameterName = "@" + keyValuePair.Key, Value = keyValuePair.Value ?? DBNull.Value }
        );
    }

    if (sqlCommand == null)
        throw new KoppelingException("Stored procedure ({0}) aanroepen lukt niet", storedprocedureNaam);
    return sqlCommand.ExecuteNonQuery();
}
....
}
于 2013-08-14T05:14:14.723 回答