将datetime作为字符串C#SQL server插入
我有一个SQL server和一个名为将datetime作为字符串C#SQL server插入,c#,sql-server,C#,Sql Server,我有一个SQL server和一个名为CitizenshipDate的专栏。该列在SQL中的类型为datetime 但是,问题是它可能具有值'0',该值不是日期时间值,而是字符串值 所以我要做的是,在插入it值时,将其作为C#中的字符串处理,但得到错误: 从字符串转换日期时间时转换失败 我得到这个错误是因为我试图在SQL server中的日期时间中插入字符串 这是我的密码: class Person { public string PersonalIdentityNumber {
CitizenshipDate
的专栏。该列在SQL中的类型为datetime
但是,问题是它可能具有值'0'
,该值不是日期时间值,而是字符串值
所以我要做的是,在插入it值时,将其作为C#中的字符串处理,但得到错误:
从字符串转换日期时间时转换失败
我得到这个错误是因为我试图在SQL server中的日期时间中插入字符串
这是我的密码:
class Person {
public string PersonalIdentityNumber { get; set; }
public string SpecialIdentityNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CitizenshipDate { get; set; }
}
List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();
var myPersons = Deserialize<List<FolkbokforingspostTYPE>>()
.Select(x => new Person
{
PersonalIdentityNumber = x.Personpost.PersonId.PersonNr,
SpecialIdentityNumber = x.Personpost.PersonId.Tilltalsnamnsmarkering != null ? x.Personpost.PersonId.Tilltalsnamnsmarkering : null,
LastName = x.Personpost.Namn.Efternamn,
FirstName = x.Personpost.Namn.Fornamn,
CitizenshipDate = x.Personpost.Medborgarskap != null ? x.Personpost.Medborgarskap.Medborgarskapsdatum : null
});
string connetionString = null;
SqlDataAdapter adpter = new SqlDataAdapter();
DataSet ds = new DataSet();
XmlReader xmlFile;
connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums";
xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
ds.ReadXml(xmlFile);
using (var connection = new SqlConnection(connetionString))
{
connection.Open();
DateTime datum = DateTime.Now;
string LastChangedBy = "System";
foreach (Person p in myPersons)
{
SqlCommand command1 = Avreg(p.UnregistrationReason, p.GivenNameNumber,p.ProtectedIdentity, p.CitizenshipDate, connection);
command1.Parameters.AddWithValue("@PersonalIdentityNumber", string.Format("{0}{1}", p.PersonalIdentityNumber, p.SpecialIdentityNumber));
command1.Parameters.AddWithValue("@FirstName", p.FirstName);
command1.Parameters.AddWithValue("@LastName", p.LastName);
command1.ExecuteNonQuery();
Console.WriteLine(string.Format("{0}{1}", p.PersonalIdentityNumber, p.SpecialIdentityNumber));
}
}
Console.WriteLine("Done");
// }// Put a break-point here, then mouse-over PersonalIdentityNumber... deserializedList contains everything if you need it
//catch (Exception)
// {
// throw;
// }
Console.ReadKey();
}
public static SqlCommand Avreg(string s, string t, string p, string c, SqlConnection connection)
{
var query = "UPDATE Seamen SET FirstName = @FirstName, "+
"LastName = @LastName, "+
SqlCommand command1;
//Here is the `CitizenshipDate`
if (c == "0")
{
query += ", CitizenshipDate = '0'";
command1 = new SqlCommand(query, connection);
command1.Parameters.Clear();
}
else
{
query += ", CitizenshipDate = @CitizenshipDate";
command1 = new SqlCommand(query, connection);
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@CitizenshipDate", c ?? DBNull.Value.ToString());
}
//Ignore these if statements
if ((!string.IsNullOrEmpty(s)) && !string.IsNullOrEmpty(t))
{
}
else
{
query += ", GivenNameNumber = @GivenNameNumber WHERE PersonalIdentityNumber = @PersonalIdentityNumber";
t = "00";
command1 = new SqlCommand(query, connection);
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@GivenNameNumber", t ?? DBNull.Value.ToString());
return command1;
}
return command1;
}
班级人员{
公共字符串PersonalIdentityNumber{get;set;}
公共字符串SpecialIdentityNumber{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串CitizenshipDate{get;set;}
}
List deserializedList=新列表();
反序列化列表=反序列化();
var myPersons=反序列化()
.选择(x=>new Person
{
PersonalIdentityNumber=x.Personpost.PersonId.PersonNr,
SpecialIdentityNumber=x.Personpost.PersonId.Tilltalsnamnsmarkering!=null?x.Personpost.PersonId.Tilltalsnamnsmarkering:null,
LastName=x.Personpost.Namn.Efternamn,
FirstName=x.Personpost.Namn.Fornamn,
CitizenshipDate=x.Personpost.Medborgarskap!=null?x.Personpost.Medborgarskap.Medborgarskap数据:null
});
字符串connetionString=null;
SqlDataAdapter adpter=新的SqlDataAdapter();
数据集ds=新数据集();
XmlReader xmlFile;
connetionString=“数据源=tsrv2062;初始目录=Bums;用户ID=BumsUser;密码=2tusen7Bums”;
xmlFile=XmlReader.Create(“navetout.xml”,新的XmlReaderSettings());
ReadXml(xmlFile);
使用(var连接=新的SqlConnection(connetionString))
{
connection.Open();
DateTime数据=DateTime.Now;
字符串LastChangedBy=“系统”;
foreach(个人p在myPersons中)
{
SqlCommand command1=Avreg(p.UnregistrationReason、p.GivenNameNumber、p.ProtectedIdentity、p.CitizenshipDate、connection);
command1.Parameters.AddWithValue(“@PersonalIdentityNumber”,string.Format(“{0}{1}”,p.PersonalIdentityNumber,p.SpecialIdentityNumber));
command1.Parameters.AddWithValue(“@FirstName”,p.FirstName);
command1.Parameters.AddWithValue(“@LastName”,p.LastName);
command1.ExecuteNonQuery();
WriteLine(string.Format(“{0}{1}”,p.PersonalIdentityNumber,p.SpecialIdentityNumber));
}
}
控制台。写入线(“完成”);
//}//在此处放置断点,然后将鼠标悬停在PersonalIdentityNumber上。。。反序列化列表包含您需要的所有内容
//捕获(例外)
// {
//投掷;
// }
Console.ReadKey();
}
公共静态SqlCommand Avreg(字符串s、字符串t、字符串p、字符串c、SqlConnection)
{
var query=“UPDATE Seamen SET FirstName=@FirstName,”+
LastName=@LastName+
sqlcommandcommand1;
//这是“公民身份日期”
如果(c==“0”)
{
查询+=”,公民身份日期='0';
command1=新的SqlCommand(查询、连接);
command1.Parameters.Clear();
}
其他的
{
query+=”,CitizenshipDate=@CitizenshipDate”;
command1=新的SqlCommand(查询、连接);
command1.Parameters.Clear();
command1.Parameters.AddWithValue(“@CitizenshipDate”,c??DBNull.Value.ToString());
}
//忽略这些if语句
如果((!string.IsNullOrEmpty(s))&&&!string.IsNullOrEmpty(t))
{
}
其他的
{
查询+=”,GivenNameNumber=@GivenNameNumber其中PersonalIdentityNumber=@PersonalIdentityNumber”;
t=“00”;
command1=新的SqlCommand(查询、连接);
command1.Parameters.Clear();
command1.Parameters.AddWithValue(“@GivenNameNumber”,t??DBNull.Value.ToString());
返回命令1;
}
返回命令1;
}
请注意,我无法更改数据库中的类型。我需要一种从字符串中插入值的方法。
有人能帮忙吗?如果列不允许空值,那么您可以使用空值表示“0”,然后在代码中,加载记录时,在UI中将空值替换为“0”。或者,如果确实允许空值,并且需要另一个值来表示“0”,则可以使用通常不会使用的任意日期,如“1/1/1753”(SQL datetime的最小值)或“1/1/1900”(smalldatetime的最小值)或类似的日期。这些日期中的任何日期都表示“0”。因此,到“0”的转换发生在应用程序中,而不是存储在数据库中。如果您的列支持null,您可以这样修复它:
if (c == "0")
{
query += ", CitizenshipDate = NULL--instead of '0'";
如果它不支持空值,则必须插入一个默认值,如DateTime.MinValue。在这种情况下,您必须确定当其值为“0”时需要输入的日期
0
不是DateTime的正确值。请尝试CitizenshipDate=NULL
@Wudge可能是NULL值不是allowed@PranavPatel什么意思?你能举个例子吗?你的日期允许Null
值吗?