首页 > 解决方案 > 为什么我的查询不会在我的代码中执行,而它在普通 sql 中执行得很好?

问题描述

我在为学校制作项目时遇到了一个问题,我们应该将数据从 .txt 文件导入我们的 C# 数据库。我以为我已经弄清楚了,但是我的“插入”行没有将数据插入到我的表中。所以,最后,我尝试只插入 1 行,其中写入了所有值,它仍然不会将数据插入数据库。

我通过右键单击我的表并从我的代码中复制粘贴插入行来尝试“新查询”选项,并且效果很好,所以我不知道为什么代码中的行不起作用。

class Program
{
    static void Main(string[] args)
    {
        string connectionString = @"Data Source= (LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|BazaPRO2.mdf;Integrated Security=True;Connect Timeout=30";
        SqlConnection dataConnection = new SqlConnection(connectionString);
        string q;
        dataConnection.Open();
        q = "INSERT INTO Sola(SolaID,Naziv,Naslov,Kraj,Posta,Telefon,Eposta) VALUES(1,'Test','Test','Test',1000,'Test','Test')";
        SqlCommand dataCommand = new SqlCommand(q, dataConnection);

        try
        {
            dataCommand.ExecuteNonQuery();
            Console.WriteLine("Success");
            dataConnection.Close();
        }
        catch { Console.WriteLine("Fail"); }
    }
}

我尝试将 executenonquery 行粘贴到 try 块中,它确实在我的屏幕上写入“Success”,但插入行不执行。

标签: c#sql-insert

解决方案


dataCommand.ExecuteNonQuery();如果返回 -1 出现问题(例如事务回滚) ,请检查 (integer Value) 的返回值。如果为 0,则不会影响任何行。

int return_value = dataCommand.ExecuteNonQuery();
if(return_value > 0)
   //goood :)
else
   //something wrong :(

编辑

顺便说一句,最好在使用命令后处理命令,如下所示:

string connectionString = @"Data Source= (LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|BazaPRO2.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection dataConnection = new SqlConnection(connectionString);
dataConnection.Open();
string q = "INSERT INTO Sola(SolaID,Naziv,Naslov,Kraj,Posta,Telefon,Eposta) VALUES(1,'Test','Test','Test',1000,'Test','Test')";
using(SqlCommand dataCommand = new SqlCommand(q, dataConnection))
{
    try
    {
        dataCommand.ExecuteNonQuery();
        Console.WriteLine("Success");
    }
    catch { Console.WriteLine("Fail"); }
}
dataConnection.Close();

EDIT2考虑评论中的问题。

你在说什么写|DataDirectory|的是“在应用程序路径中搜索那个 dasabase”,如果你正在调试你的应用程序,这意味着它在输出调试文件夹中搜索 dabase ......如果你不认为你应该将数据库作为目标您的应用程序目录具有相对/绝对路径(查找AppDomain.SetData方法)或将您的数据库复制到您的应用程序目录中......在不知道您的目标的情况下很难回答您:)

更具体地说,在初始化 SqlConnection 之前调用以下代码:

AppDomain.SetData("DataDirectory", "C:\\TEST\\");

设置|DataDirectory|指向您的数据库路径。


推荐阅读