首页 > 解决方案 > c#函数不更新参数

问题描述

这是一个基本的 c# 应用程序,但我很生疏。我将首先向您展示我的代码

using System;
using System.Data.SqlClient;
using System.Text;


namespace DatabaseAdder
{
    class Program
    {
        static void Main(string[] args)
        {
               int RUId = 0;
                    int QuestionId = 0;
                    DateTime Date = DateTime.Now;
                    string QuestionWhenAnswered ;
                    string QuestionResponse;
                    int Accepted;
                    string AssignedWorkStation;
                    string CompleteToken;
            try
            {for (int i = 0; i < 300; i++) {

                   QuestionId ++;
                   QuestionIncrementInSetsOfTwelve(QuestionId);

                    Console.WriteLine(i  );
                    Console.WriteLine( QuestionId);

                    Random rand = new Random();

                // Build connection string
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "localhost";   // update me
                builder.UserID = "sa";              // update me
                builder.Password = "Mypassword123";      // update me
                builder.InitialCatalog = "CDA";

                // Connect to SQL
                Console.Write("Connecting to SQL Server ... ");
                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {

                    connection.Open();
                    var sql = "INSERT INTO QuestionResponses(RUId, QuestionId,Date,QuestionWhenAnswered,QuestionResponse,Accepted,AssignedWorkStation,CompleteToken)" +
                        " VALUES(@RUId, @QuestionId,@Date,@QuestionWhenAnswered,@QuestionResponse,@Accepted,@AssignedWorkStation,@CompleteToken)";
                    using (var cmd = new SqlCommand(sql, connection))
                    {
                        cmd.Parameters.AddWithValue("@RUId", "1" );
                        cmd.Parameters.AddWithValue("@QuestionId",  "1");
                        cmd.Parameters.AddWithValue("@Date", DateTime.Now);
                        cmd.Parameters.AddWithValue("@QuestionWhenAnswered", "sam");
                        cmd.Parameters.AddWithValue("@QuestionResponse", "sam");
                        cmd.Parameters.AddWithValue("@Accepted", "1");
                        cmd.Parameters.AddWithValue("@AssignedWorkStation", "sam"); 
                        cmd.Parameters.AddWithValue("@CompleteToken", "sam");

                        cmd.ExecuteNonQuery();
                    }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }

            Console.WriteLine("All done. Press any key to finish...");
            Console.ReadKey(true);
        }

      static int  QuestionIncrementInSetsOfTwelve(int questionId)
        {
            if(questionId < 12)
            {
                questionId = 0;
            }
            else
            {
            }
            return questionId;
        }
    }
}

questionincrementinsetsoftwelve 在被调用时并没有改变值,即使我已经调试并且可以看到它的值超过 12,但它仍然没有将它设置回 0。

我知道我可能忽略了一些非常小的东西,所以对我的自我保持轻松。

标签: c#

解决方案


这一点

QuestionId ++;
QuestionIncrementInSetsOfTwelve(QuestionId);

应该

QuestionId ++;
QuestionId = QuestionIncrementInSetsOfTwelve(QuestionId);

整数是按值传递的,而不是按引用传递的。因此,将一个与 QuestionId 具有相同值的新整数传递给该方法,并从该方法返回该新整数。您必须分配结果。您正在寻找的行为可以通过使用ref关键字来实现,但只要我们分配结果就不需要。


推荐阅读