Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据库保存变量并在C中使用它?_C#_Database - Fatal编程技术网

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

我正在更改一个程序,我需要一些帮助,因为我不知道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();
在这种情况下,我需要找到一个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