本地数据库插入查询不执行任何操作
本文关键字:执行 任何 操作 查询 数据库 插入 | 更新日期: 2023-09-27 18:32:59
我正在尝试在数据库中插入一行。以下是我的查询:
using (SqlConnection conn = new SqlConnection("Data Source = (LocalDB)'v11.0;AttachDbFilename=|DataDirectory|'Traindata.mdf;Integrated Security=True"))
{
string query = "INSERT INTO dbo.Station (Naam, X, Y, Sporen) VALUES (@naam, @x, @y, @sporen)";
using (SqlCommand command = new SqlCommand(query, conn))
{
command.Parameters.AddWithValue("@naam", insert[1]);
command.Parameters.AddWithValue("@x", insert[2]);
command.Parameters.AddWithValue("@y", insert[3]);
command.Parameters.AddWithValue("@sporen", insert[4]);
conn.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException exc)
{
Console.WriteLine("Error to save on database");
Console.WriteLine(exc.Message);
}
conn.Close();
}
}
当我运行它时,没有任何反应(也没有SQL错误)。 我做错了什么?如果这是一个愚蠢的问题,我很抱歉,我只是一个初学者。
这应该有效(我已经使用确实有效的选择查询对此进行了测试)。
您是否尝试过将查询存储在存储过程中并从 C# 调用它?这实际上比通过 C# 代码中的硬代码进行查询更容易......只需创建一个存储过程,该存储过程可以执行您希望它执行的任何操作,然后从 C# 调用它并添加参数。它应该看起来像这样:
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Your_Conection_String_s_Name"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "dbo.Your_Stored_Procedure";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Input_Param_1", SqlDbType.VarChar, 18).Value = "C#_Parameter1";
cmd.Parameters.Add("@Input_Param_2", SqlDbType.VarChar, 45).Value = "C#Parameter_2";
cmd.Parameters.Add("@Input_Param_3", SqlDbType.VarChar, 45).Value = "C#Parameter_3";
cmd.Parameters.Add("@Input_Param_4", SqlDbType.Text).Value = "C#Parameter_4";
cmd.Parameters.Add("@Input_Param_5", SqlDbType.VarChar, 45).Value = "C#Parameter_5";
cmd.Parameters.Add("@Output_Parameter_1", SqlDbType.VarChar, 250).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@Output_Parameter_2", SqlDbType.DateTime).Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
"C#Output_Parameter_1" = "" + cmd.Parameters["@Output_Parameter_1"].Value;
"C#Output_Parameter_2" = "" + cmd.Parameters["@Output_Parameter_2"].Value;
希望对您有所帮助。
我的猜测是你有一个类型不匹配
如果 x、y 不是 int,则以正确的类型替换
using (SqlConnection conn = new SqlConnection("Data Source = (LocalDB)'v11.0;AttachDbFilename=|DataDirectory|'Traindata.mdf;Integrated Security=True"))
{
using (SqlCommand command = SqlCommand.CreateCommand())
{
try
{
conn.Open();
command.Query = "select count(*) from dbo.Station";
Int32 rowsRet = (Int32)command.ExecuteScalar();
Console.WriteLine(rowsRet.ToString());
command.Query = "INSERT INTO dbo.Station (Naam, X, Y, Sporen) VALUES (@naam, @x, @y, @sporen)";
command.Parameters.AddWithValue("@naam", insert[1]);
command.Parameters.Add("@x", SqlDbType.Int);
command.Parameters["@x"].Value = Int32.Parse(insert[2]);
command.Parameters.Add("@y", SqlDbType.Int);
command.Parameters["@y"].Value = Int32.Parse(insert[3]);
command.Parameters.AddWithValue("@sporen", insert[4]);
rowsRet = command.ExecuteNonQuery();
Console.WriteLine(rowsRet.ToString());
command.Query = "select count(*) from dbo.Station";
Int32 rowsRet = (Int32)command.ExecuteScalar();
Console.WriteLine(rowsRet.ToString());
}
catch (SqlException exc)
{
Console.WriteLine("Error to save on database");
Console.WriteLine(exc.Message);
}
finally
{
conn.Close();
}
// op claims the insert is gone the next time the programs is run
try
{
conn.Open();
command.Query = "select count(*) from dbo.Station";
Int32 rowsRet = (Int32)command.ExecuteScalar();
Console.WriteLine(rowsRet.ToString());
}
catch (SqlException exc)
{
Console.WriteLine("Error to save on database");
Console.WriteLine(exc.Message);
}
finally
{
conn.Close();
}
}
}