C#和存储过程

时间:2015-09-07 08:49:29

标签: c# sql stored-procedures ado.net

如何使用C#动态地将参数传递给存储过程?

例如,我有一个名为Person的表,其中包含NameCityZipcode等列。

所以代码是:

cmd.Parameters.Add("@Name", SqlDbType.varchar);
cmd.Parameters.Add("@City", SqlDbType.varchar);
cmd.Parameters.Add("@Zipcode", SqlDbType.varchar);

现在我要添加两列,让我们说StateCountry

所以代码现在是:

cmd.Parameters.Add("@Name", SqlDbType.varchar);
cmd.Parameters.Add("@City", SqlDbType.varchar);
cmd.Parameters.Add("@Zipcode", SqlDbType.varchar);
cmd.Parameters.Add("@State", SqlDbType.varchar);
cmd.Parameters.Add("@Country", SqlDbType.varchar);

还有更好的办法吗?

编辑:

在线搜索后,我想出了以下解决方案

aspx.cs文件后面的

词典dicPersonH​​ash =新词典();

    dicPersonHash .Add("@Name", txtName.Text);
    dicPersonHash .Add("@City", txtCity.Text);
    dicPersonHash .Add("@Zipcode", txtZipcode.Text);
    dicPersonHash .Add("@State", txtState.Text);
    dicPersonHash .Add("@Country", txtName.Text);
    dicPersonHash.Add("@returnID", null);
    dicPersonHash .Add("mode", "Insert");
    dicPersonHash .Add("spName", "ManagePerson");

并且有一个名为clsDataAccess.cs的类,并且有一个名为ManageData的方法

public int ManageData(Dictionary<string, object> dicDataHash)
    {
        int i = 0;
        string[] excludeKeyHash = { "mode", "spName" };
        try
        {
            cn.Close();
            cn.Open();
            cmd = new SqlCommand(dicDataHash["spName"].ToString(), cn);
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (KeyValuePair<string, object> kvp in dicDataHash)
            {
                if (!excludeKeyHash.Contains(kvp.Key))
                {
                    if (kvp.Key == "@returnID")
                    {
                        cmd.Parameters.Add(kvp.Key, SqlDbType.Int).Direction = ParameterDirection.Output;
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue(kvp.Key, kvp.Value);
                    }
                }
            }
            i = cmd.ExecuteNonQuery();
            if (dicDataHash["mode"] == "Insert")
            {
                i = Convert.ToInt32(cmd.Parameters["@returnID"].Value.ToString());
            }
        }
        catch (Exception ex)
        {
            throw ex;
            i = -1;
        }
        finally
        {
            cn.Close();
        }
        return i;
    }
这些怎么样?有没有更好的方法来做这些?请给我这些评论/建议

0 个答案:

没有答案