我收到错误
ExecuteNonQuery免费下载 Anslutningens aktuellastatusärstängd。
尝试运行我的代码时。我以为我相应地打开并关闭了连接
string connetionString = null;
SqlConnection connection;
SqlCommand command;
SqlDataAdapter adpter = new SqlDataAdapter();
DataSet ds = new DataSet();
XmlReader xmlFile;
string sql = null;
connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums";
connection = new SqlConnection(connetionString);
xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
ds.ReadXml(xmlFile);
connection.Open();
DateTime datum = DateTime.Now;
SqlCommand command1 = new SqlCommand("UPDATE Seamen SET FirstName = @FirstName, LastName = @LastName, NationalRegistrationCountyCode = @NationalRegistrationCountyCode, NationalRegistrationMunicipalityCode = @NationalRegistrationMunicipalityCode, CitizenshipCode = @CitizenshipCode, LastChangedDate = @LastChangedDate WHERE PersonalIdentityNumber = @PersonalIdentityNumber", connection);
for (int i = 0; i < PersonalIdentityNumber.Count; i++)
{
var personnummer = PersonalIdentityNumber[i];
var fornamn = FirstName[i];
var efternamn = LastName[i];
var lankod = LanKod[i];
var kommunkod = Kommunkod[i];
//var utdelAdress2 = UtdelAdress2[i];
//var postNr = PostNr[i];
//var postOrt = PostOrt[i];
//var fodelselanKod = FodelselanKod[i];
//var fodelseforsamling = Fodelseforsamling[i];
var medborgarskapslandKod = MedborgarskapslandKod[i];
// var medborgarskapsdatum = Medborgarskapsdatum[i];
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@PersonalIdentityNumber", personnummer);
command1.Parameters.AddWithValue("@FirstName", fornamn);
command1.Parameters.AddWithValue("@LastName", efternamn);
command1.Parameters.AddWithValue("@NationalRegistrationCountyCode", lankod);
command1.Parameters.AddWithValue("@NationalRegistrationMunicipalityCode", kommunkod);
//command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress2", utdelAdress2);
//command1.Parameters.AddWithValue("@NationalRegistrationPostCode", postNr);
//command1.Parameters.AddWithValue("@NationalRegistrationCity", postOrt);
//command1.Parameters.AddWithValue("@BirthCountyCode", fodelselanKod);
//command1.Parameters.AddWithValue("@BirthParish", fodelseforsamling);
command1.Parameters.AddWithValue("@CitizenshipCode", medborgarskapslandKod);
// command1.Parameters.AddWithValue("@CitizenshipDate", medborgarskapsdatum);
command1.Parameters.AddWithValue("@LastChangedDate", datum);
command1.ExecuteNonQuery();
Console.WriteLine(personnummer);
connection.Close();
Console.WriteLine("Done");
有人能找到什么问题吗?
答案 0 :(得分:3)
您的connection.Close()
似乎处于循环中,因为您忘记了右括号。只有第一次迭代成功,第二次迭代因关闭连接而失败。
但是,不要急于添加支架并考虑修复。这不是解决问题的好方法,因为会出现另一个问题 - 您需要处理关闭异常的连接。
C#为此提供了解决方案 - 它是using
构造。你应该像这样解决它:
using(var connection = new SqlConnection(connetionString)) {
connection.Open();
... // Rest of your code; Do not call connection.Close()
}
由于connection
包含在using
中,程序会在退出using
块时自动关闭它。它会在正常退出时执行,但也会在退出异常时执行,因此您不必担心捕获,关闭和重新抛出。
答案 1 :(得分:0)
添加dasblinkenlight的真实建议将你的结束连接放在for循环之外,在for循环结束时放一个command1.parameters.clear(你必须清除旧的参数)
答案 2 :(得分:0)
您发布的代码段缺少for
循环的紧密括号 - 它应该紧跟在Console.WriteLine(personnummer);
之后但如果不是,则关闭连接的以下行将在内部for
循环和连接将在第一次迭代后关闭,导致第二次迭代出错。