1

我是面向对象编程和 C# 的菜鸟。我正在上夜校学习C#,但我的知识水平处于monkey-see-monkey-do 水平。我这里有一些代码和一些基本问题:


public static String InsertProduct(SqlConnection cnSQL, String strProductDesc, String strProductHS, String strManufacturer)
    {
        SqlCommand cmdSQL;
        Int32 intRetCode = 0;
        String strProductKey;


        if (cnSQL != null)
        {
            cmdSQL = new SqlCommand();
            cmdSQL.Connection = cnSQL;
            cmdSQL.CommandText = "uspInsertProduct";
            cmdSQL.CommandType = CommandType.StoredProcedure;

            cmdSQL.Parameters.Add(new SqlParameter("@ProductDesc", SqlDbType.NVarChar, 250));
            cmdSQL.Parameters["@ProductDesc"].Direction = ParameterDirection.Input;
            cmdSQL.Parameters["@ProductDesc"].Value = strProductDesc;

            ********************************
             Code removed for brevity
            *********************************

            cmdSQL.Parameters.Add(new SqlParameter("@ProductID", SqlDbType.NVarChar, 10));
            cmdSQL.Parameters["@ProductID"].Direction = ParameterDirection.Output;

            try
            {
                cmdSQL.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                intRetCode = -1;
            }
           ************Offending Code Start
           strProductKey = cmdSQL.Parameters["@ProductID"].ToString;
           ************Offend Code End
            cmdSQL.Parameters.Clear();
            cmdSQL.Dispose();
      }
            return strProductKey; 

    }    

当我有这个语句“cmdSQL.Parameters[“@ProductID”].Direction = ParameterDirection.Output;”时会返回什么?记录号还是实际密钥?

假设答案是实际的关键,我如何构造变量赋值以便我可以将它返回给调用例程?

谢谢。

4

1 回答 1

1

对于您问题的第一部分:

实际返回值由存储过程决定uspInsertProduct。您必须查看 SQL 以查看该存储过程的定义才能找到答案。

对于第二部分:

调用存储过程后,您必须获取输出参数的值。

try
{
    cmdSQL.ExecuteNonQuery();
    strProductKey = cmdSQL.Parameters["@ProductID"].Value;
}

...

return strProductKey;
于 2013-03-15T03:37:39.757 回答