C# 如何从数据库保存变量并在C中使用它?
我正在更改一个程序,我需要一些帮助,因为我不知道C。我使用以下方法更改内容:C# 如何从数据库保存变量并在C中使用它?,c#,database,C#,Database,我正在更改一个程序,我需要一些帮助,因为我不知道C。我使用以下方法更改内容: strSQL = "UPDATE materials SET "; strSQL = strSQL + "Dscr = 'concrete', "; strSQL = strSQL + "width=50 "; strSQL = strSQL + " WHERE ID=385"; objCmd = new OleDbCommand(strSQL, db_def.conn); objCmd.ExecuteNonQuery
strSQL = "UPDATE materials SET ";
strSQL = strSQL + "Dscr = 'concrete', ";
strSQL = strSQL + "width=50 ";
strSQL = strSQL + " WHERE ID=385";
objCmd = new OleDbCommand(strSQL, db_def.conn);
objCmd.ExecuteNonQuery();
在这种情况下,我需要找到一个ID,存储它,然后再次使用它。所以我使用select
OleDbCommand cmd = new OleDbCommand("SELECT ID FROM materials WHERE Type=1", db_def.conn);
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
var result = reader.GetInt32(0);
}
strSQL = "UPDATE materials SET ";
strSQL = strSQL + "Dscr = 'concrete', ";
strSQL = strSQL + "width=50 ";
strSQL = strSQL + " WHERE ID=result";
objCmd = new OleDbCommand(strSQL, db_def.conn);
objCmd.ExecuteNonQuery();
但我有一个错误:
没有为一个或多个必需参数提供值
虽然您正在处理的代码不太理想,但我将提供您此时所需的修复: 将代码更改为:
OleDbCommand cmd = new OleDbCommand("SELECT ID FROM materials WHERE Type=1", db_def.conn);
OleDbDataReader reader = cmd.ExecuteReader();
int result=0;
if (reader.HasRows)
{
reader.Read();
result = reader.GetInt32(0);
}
strSQL = "UPDATE materials SET ";
strSQL = strSQL + "Dscr = 'concrete', ";
strSQL = strSQL + "width=50 ";
strSQL = strSQL + " WHERE ID=" + result;
objCmd = new OleDbCommand(strSQL, db_def.conn);
objCmd.ExecuteNonQuery();
您需要在SQL字符串之外提供结果变量的值-数据库在其自身上下文中不知道“result”的值
编辑:结果变量是在if语句中声明的,因此无法进一步分配。您可以试试这个,然后告诉我它是否有效
OleDbCommand cmd = new OleDbCommand("SELECT ID FROM materials WHERE Type=1", db_def.conn);
OleDbDataReader reader = cmd.ExecuteReader();
int result=-1 ;
if (reader.HasRows)
{
reader.Read();
result = reader.GetInt32(0);
}
if (result != -1)
{
strSQL = "UPDATE materials SET ";
strSQL = strSQL + "Dscr = 'concrete', ";
strSQL = strSQL + "width=50 ";
strSQL = strSQL + " WHERE ID="+result;
objCmd = new OleDbCommand(strSQL, db_def.conn);
objCmd.ExecuteNonQuery();
}
这是正确的,但是考虑到Kallia提供的错误和意图,很明显这在本例中是准确的。如果材质中有一个名为result的列,则不会引发此错误。我这样做了,但现在的错误是:当前上下文中不存在名为result的列。没有名为result的列,结果只是一个变量。我已经更新了代码来纠正这个问题-尝试使用上面我编辑的代码。我尝试过,但现在的问题是语法错误,因为我在第条中这样做了,而这次的错误是:使用未分配的局部变量resultI声明的'result'在'If'之外复制这个还是否?很抱歉,我没有在下面做同样的事情,我做了,答案是未分配的局部变量resulty你不能将null放入int