Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#应用程序动态调用SQL Server存储过程_C#_Sql Server_Stored Procedures - Fatal编程技术网

从C#应用程序动态调用SQL Server存储过程

从C#应用程序动态调用SQL Server存储过程,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有一个类(dbConnections),其中包含处理DB查询类型的方法。我想调用这个类中的一个方法,传递过程的名称和一个数组,该数组包含该特定调用所需的参数 但是,当执行时,它不会识别是否传递了任何参数。如果我硬编码它们,它们工作得很好,所以我的循环应用程序显然有问题 我希望能够重新使用这个方法来传递和获取不同的参数,我只是不知道该怎么做。我还没有处理返回参数,因为我还没有得到这个工作 如有任何见解,将不胜感激 这是我的dbConnections类中的方法: public void Execu

我有一个类(
dbConnections
),其中包含处理DB查询类型的方法。我想调用这个类中的一个方法,传递过程的名称和一个数组,该数组包含该特定调用所需的参数

但是,当执行时,它不会识别是否传递了任何参数。如果我硬编码它们,它们工作得很好,所以我的循环应用程序显然有问题

我希望能够重新使用这个方法来传递和获取不同的参数,我只是不知道该怎么做。我还没有处理返回参数,因为我还没有得到这个工作

如有任何见解,将不胜感激

这是我的
dbConnections
类中的方法:

public void ExecuteProcedure(string procedureName, string[] paramName, string[] procParams)
{
        SqlCommand cmd = new SqlCommand(procedureName, con);
        cmd.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i >= paramName.Length; i++)
        {
            cmd.Parameters.AddWithValue(paramName[i], procParams[i]);
        }

        cmd.ExecuteNonQuery();
}
这是一个调用方法:

private void btn_logIn_Click(object sender, EventArgs e)
{          
        string uid = txb_userId.Text;
        string pwd = txb_password.Text;
        string procedureName = "spUsers_Login";
        string[] paramName = new string[2];
        string[] procParams = new string[2];

        paramName[0] = "@Username";
        procParams[0] = uid;
        paramName[1] = "@Password";
        procParams[1] = pwd;

        db.OpenConection();
        db.ExecuteProcedure(procedureName, paramName, procParams);
}

你能像这样修改代码吗

private void btn_logIn_Click(object sender, EventArgs e)
    {          
        string uid = txb_userId.Text;
        string pwd = txb_password.Text;
        string procedureName = "spUsers_Login @Username, @Password";
        string[] paramName = new string[2];
        string[] procParams = new string[2];

        paramName[0] = "@Username";
        procParams[0] = uid;
        paramName[1] = "@Password";
        procParams[1] = pwd;

        db.OpenConection();
        db.ExecuteProcedure(procedureName, paramName, procParams);
    }

你能像这样修改代码吗

private void btn_logIn_Click(object sender, EventArgs e)
    {          
        string uid = txb_userId.Text;
        string pwd = txb_password.Text;
        string procedureName = "spUsers_Login @Username, @Password";
        string[] paramName = new string[2];
        string[] procParams = new string[2];

        paramName[0] = "@Username";
        procParams[0] = uid;
        paramName[1] = "@Password";
        procParams[1] = pwd;

        db.OpenConection();
        db.ExecuteProcedure(procedureName, paramName, procParams);
    }

首先检查你的循环

for (int i = 0; i >= paramName.Length; i++)

它永远不会通过条件,它应该是
i首先检查你的循环

for (int i = 0; i >= paramName.Length; i++)

它永远不会通过条件,它应该是
iyour
for
循环,是否要“=”?您应该签出并停止使用
.AddWithValue()
-它可能会导致意外的结果…您是否检查了正在执行的SQL查询?我相信您的SQL命令在最终生成查询中是这样的:
exec-procedureName-Value,Value,Value
而不是
exec-procedureName@property=Value,@property2=Value,@property3=Value
您的
for
循环,是否需要“=”?您应该签出并停止使用
.AddWithValue()
-这可能会导致意外的结果……您是否检查了正在执行的SQL查询?我相信最终生成查询中的SQL命令是这样的:
exec-procedureName-Value,Value,Value
而不是
exec-procedureName@property=Value,@property2=Value,@property3=Value