为什么查询在我的代码中不执行,而在普通sql中却执行得很好呢?

时间:2019-05-27 12:12:04

标签: c# sql-insert

在为学校制作项目时遇到问题,我们应该将数据从.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块中,但它确实在屏幕上写了“成功”,但是插入行不执行。

1 个答案:

答案 0 :(得分:2)

如果dataCommand.ExecuteNonQuery();的返回值(整数值)返回-1,则表示出了点问题(for example a transaction rollback)。如果为0,则不影响任何行。

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

EDIT

Btw最好像下面那样使用它们后处置这些命令:

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|"search in the application path for that dasabase",如果您要调试应用程序,则意味着它将在输出调试文件夹中搜索数据库...如果您不希望将目标放在使用相对/绝对路径(请参见AppDomain.SetData方法)将数据库从应用程序目录中移出,或者将数据库复制到应用程序目录中...在不知道目标的情况下很难回答:)

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

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

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