Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将datetime作为字符串C#SQL server插入_C#_Sql Server - Fatal编程技术网

将datetime作为字符串C#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 {

我有一个SQL server和一个名为
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
值吗?