如何使用C#向存储过程传递值

4

--存储过程

  ALTER PROCEDURE [dbo].[Test]             
@USERID varchar(25)              

 AS               
 BEGIN                  
SET NOCOUNT ON                    
IF NOT EXISTS Select * from Users where USERID = @USERID)         
    BEGIN                          
        INSERT INTO Users (USERID,HOURS) Values(@USERID, 0);                   
    END

我有一个存储过程在SQL Server 2005中,想要从C#应用程序中传递用户ID。我该怎么做?非常感谢。

可能是重复的问题:如何从C#程序中执行存储过程 - George Stocker
@John Fisher 我们鼓励那些可以通过谷歌搜索得到答案的问题。这样,当人们使用谷歌搜索时,像 Stack Overflow 这样的权威来源就会出现,而不是传统的数百个论坛。 - George Stocker
1
@George:这有一定道理,但你不认为MSDN已经足够权威了吗? - John Fisher
@John/@George。我之前在元网站上问过关于这个问题的问题。就我个人而言,我认为SO的工作并不是包含整个互联网上所有相关代码示例的价值,而是作为技术信息的权威来源,有时通过val和有时通过ref。尽管如此,意见仍然存在差异-这就是SO如此酷的一个重要原因。 - Steve Townsend
@Steve Townsend,将其放在这里比放在其他地方更好的原因是:如果该网站崩溃或不可用,会发生什么?那个人只是把所有东西都拿走了吗?在这种情况下,它是MSDN,但我们并不总是那么幸运。 - George Stocker
1个回答

9

这个主题在MSDN上有详细的介绍。请查看标题为“使用参数与SqlCommand和存储过程”的部分,其中提供了一个很好的示例:

static void GetSalesByCategory(string connectionString, 
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = new SqlParameter();
        parameter.ParameterName = "@CategoryName";
        parameter.SqlDbType = SqlDbType.NVarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = categoryName;

        // Add the parameter to the Parameters collection. 
        command.Parameters.Add(parameter);

        // Open the connection and execute the reader.
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        reader.Close();
    }
}

Stack Overflow应该是我们存放代码的地方,如果可能的话不要使用第三方网站。这个问题也是另一个问题的副本:https://dev59.com/J3M_5IYBdhLWcg3wt1k0。 - George Stocker
1
@George Stocker:但是您添加的链接没有任何被接受的答案,而且它是关于调用存储过程,而不是向它们传递参数。 - Patrick
@George - 好的,希望微软不会对他们的示例代码有领土要求。 - Steve Townsend
我正在寻找这种方法。我在这个链接上找到了一篇好文章:http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson07.aspx,但是这个例子更有帮助。@Steven 非常感谢。 - Ani
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接