本地数据库插入查询不执行任何操作

本文关键字:执行 任何 操作 查询 数据库 插入 | 更新日期: 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();
        }
    }
}