我需要插入一个表“通过”或“失败”,如果从查询完成有一个单一的失败而不是'RProva'我必须把“失败”如果查询找不到单个失败而不是' RProva'我必须插入“传递”,查询工作但我无法弄清楚如何使用查询的结果,也许我必须使用“for”?不知道。它是尝试制作它,第二个是查询,我必须插入可能的结果“IF”
1.
SqlCommand cmdRD = new SqlCommand("SELECT ResItem AS RD FROM tSE JOIN tL ON tSE.idSE=tL.idL WHERE tL.Selection=1");
var RD = cmdRD.ExecuteScalar();
var values = new List<string>();
using (cmdRD,sqliteCon)
{
using (SqlDataReader reader = cmdRD.ExecuteReader())
{
while (reader.Read())
{
values.Add(reader[0].ToString());
}
}
}
2.
SqlCommand cmd1 = new SqlCommand("INSERT INTO tSD(NomeItem,ResItemDet,DateStartDet,DateEndDet) OUTPUT inserted.Id VALUES (@NI,@RProva,@DATESE,@DATEED)");
cmd1.Parameters.AddWithValue("@DATESE", DATESE);
cmd1.Parameters.AddWithValue("@DATEED", DATEED);
cmd1.Parameters.AddWithValue("@NI", NI);
using (cmd1,sqliteCon)
{
foreach (var value in values)
{
if (value.Equals(pass))
{
cmd1.Parameters.AddWithValue("@RProva", value);
}
else
{
cmd1.Parameters.AddWithValue("@RProva", fail);
}
cmd1.ExecuteNonQuery();
}
}
int generatedId = Convert.ToInt32(cmd1.ExecuteScalar());
cmd1.Parameters.Clear();
SqlCommand cmd2 = new SqlCommand("UPDATE tSE SET FK_TSD_id = @tsdId FROM tL JOIN tSE ON tL.idL = tSE.idSE WHERE tL.Selection=1 ", sqliteCon);
cmd2.Parameters.AddWithValue("@tsdId", generatedId);
cmd2.ExecuteNonQuery();
MessageBox.Show("Dato Aggiunto");
}
sqliteCon.Close();
1.1
SqlCommand cmdRD = new SqlCommand("SELECT ResItem AS RD FROM tSE JOIN tL ON tSE.idSE=tL.idL WHERE tL.Selection=1", sqliteCon);
var RD = cmdRD.ExecuteScalar();
var tot =pass;
using (cmdRD)
{
using (SqlDataReader reader = cmdRD.ExecuteReader())
{
while (reader.Read())
{
if(reader[0].ToString()==fail)
{
tot = fail;
break;
}
}
MessageBox.Show(tot);
}
}
我到了那里(1.1)它有效,但我要将TOT插入RProva
根据你的问题和评论,我认为你误解了ExecuteScalar: ExecuteScalar执行查询,并返回查询返回的结果集中第一行的第一列。 docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar
我不知道“RD”或“PASS”的类型,但您的示例中的IF(使用ExecuteScalar时)似乎没问题。另外,当您使用ExecuteReader时,您应该使用某种循环来遍历Items。像这样:
string pass = "abc"; // guessing types and values
string fail = "failed";
string sqliteCon = "Data Source=(localdb)\\MSSQLLocalDB;Database=BooksDb";
using (SqlConnection connection = new SqlConnection(sqliteCon))
{
connection.Open();
var queryString = @"SELECT ResItem AS RD
FROM tSE
JOIN tL ON tSE.idSE = tL.idL
WHERE tL.Selection=1";
var values = new List<string>();
using (SqlCommand command = new SqlCommand(queryString, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
values.Add(reader[0].ToString());
}
}
}
var queryInsert = @"INSERT INTO tSD (NomeItem,ResItemDet,DateStartDet,DateEndDet)
VALUES (@NI, @RProva, @DATESE, @DATEED)";
using (SqlCommand command2 = new SqlCommand(queryInsert, connection))
{
foreach(var value in values)
{
command2.Parameters.Clear();
if (value.Equals(pass))
{
command2.Parameters.AddWithValue("@RProva", value);
}
else
{
command2.Parameters.AddWithValue("@RProva", fail);
}
command2.ExecuteNonQuery();
}
}
}
Theres肯定是一个更好的方法,但也许这可以帮助你。
编辑:这是我将如何实现您的代码示例:
using (SqlConnection sqliteCon = new SqlConnection(connection))
{
sqliteCon.Open();
var values = new List<string>();
var query = "SELECT ResItem AS RD FROM tSE JOIN tL ON tSE.idSE=tL.idL WHERE tL.Selection=1";
using (SqlCommand cmdRD = new SqlCommand(query, sqliteCon))
{
var RD = cmdRD.ExecuteScalar();
using (SqlDataReader reader = cmdRD.ExecuteReader())
{
while (reader.Read())
{
values.Add(reader[0].ToString());
}
}
}
int generatedId = 0;
var query2 = "INSERT INTO tSD(NomeItem,ResItemDet,DateStartDet,DateEndDet) OUTPUT inserted.Id VALUES (@NI,@RProva,@DATESE,@DATEED)";
using (SqlCommand cmd1 = new SqlCommand(query2, sqliteCon))
{
foreach (var value in values)
{
cmd1.Parameters.Clear();
cmd1.Parameters.AddWithValue("@DATESE", DATESE);
cmd1.Parameters.AddWithValue("@DATEED", DATEED);
cmd1.Parameters.AddWithValue("@NI", NI);
if (value.Equals(pass))
{
cmd1.Parameters.AddWithValue("@RProva", value);
}
else
{
cmd1.Parameters.AddWithValue("@RProva", fail);
}
cmd1.ExecuteNonQuery();
}
generatedId = Convert.ToInt32(cmd1.ExecuteScalar());
}
var query3 = "UPDATE tSE SET FK_TSD_id = @tsdId FROM tL JOIN tSE ON tL.idL = tSE.idSE WHERE tL.Selection=1 ";
using (SqlCommand cmd2 = new SqlCommand(query3, sqliteCon))
{
cmd2.Parameters.AddWithValue("@tsdId", generatedId);
cmd2.ExecuteNonQuery();
}
}