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