c# - 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。
我知道我可能忽略了一些非常小的东西,所以对我的自我保持轻松。
解决方案
这一点
QuestionId ++;
QuestionIncrementInSetsOfTwelve(QuestionId);
应该
QuestionId ++;
QuestionId = QuestionIncrementInSetsOfTwelve(QuestionId);
整数是按值传递的,而不是按引用传递的。因此,将一个与 QuestionId 具有相同值的新整数传递给该方法,并从该方法返回该新整数。您必须分配结果。您正在寻找的行为可以通过使用ref
关键字来实现,但只要我们分配结果就不需要。
推荐阅读
- excel - 使用 go 循环遍历特定的 excel 列
- git - 从 svn 转换为 git 后如何从分支名称中删除远程源
- .net-core - 将 Dynamics CRM SDK 与 .NET Core 结合使用
- c# - 如何使用#pragma 警告禁用 CA1814?
- javascript - 用 span 替换部分字符串
- javascript - Chrome 控制台中奇怪的“e”或“t”表示什么
- excel - 从 Crystal Reports 2016 v14 中删除所有分页符 -> Excel 导出
- qt - Qt 使用带有 QAbstractItemModel 的预先存在的模型
- css - 如何自动设置 TD 宽度全部相等宽度
- excel - 复制 Book1 中的 B 列(单元格 B2) Book2 中的 B 列(单元格 B2)