Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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#_Sql_Sql Server_Tsql_Ado.net - Fatal编程技术网

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

C# 本地数据库插入查询不执行任何操作,c#,sql,sql-server,tsql,ado.net,C#,Sql,Sql Server,Tsql,Ado.net,我试图在数据库中插入一行。以下是我的疑问: 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 (@

我试图在数据库中插入一行。以下是我的疑问:

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错误。我做错了什么?如果这是一个愚蠢的问题,我很抱歉,我只是一个初学者


这应该行得通我已经用一个有效的select查询测试过了。

您是否尝试过将查询存储在存储过程中并从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();
        }
    }
}

您的连接字符串是什么?请确保您查询的数据库正确。根据您的项目设置,您可能正在插入一个文件,该文件在生成项目时复制到其他位置。我在该项目中只有一个数据库。我的连接字符串:数据源=LocalDB\v11.0;AttachDbFilename=| DataDirectory |\Traindata.mdf;integratedsecurity=True-我是从属性设置中得到的。在中放置一个断点,一步一步地执行代码,确保它确实已执行。我投票关闭了它。没有重现问题的示例代码,用户已放弃其帐户。因此,为每个查询创建一个SP?如何添加过程?您是否有指向优秀教程或类似内容的链接?您可以在SQL server management studio中添加新的存储过程。。。只需找到数据库并找到一个名为Programmability的文件夹,该文件夹内是存储过程的文件夹。。。是的,你应该为每个不同的任务创建一个SP,但你可以循环使用它们,因此,你可以无限次调用同一个SP,你只需要找到一种方法使其模块化。添加后计数确实变为2,但如果我重新运行程序,它将从1开始,然后再次变为2。它没有像应该的那样储蓄?不是我不相信你,而是那很奇怪。请参阅更新。