int与datetime2不兼容

时间:2014-01-23 23:30:58

标签: c# sql stored-procedures

当我的asp网页表单中使用了我的存储过程时,我试图让它抓住当前的时间和日期。信息将存储在具有datetime2数据类型的列中。填写表格时,我得到了这个......

操作数类型碰撞:int与datetime2不兼容

command.Parameters.AddWithValue("@dt2LastLoginDate", SqlDbType.DateTime2);

为了将日期和时间存储为正确的数据类型,应该使用什么?

protected void Submit_Click(object sender, EventArgs e)
{
    try
    {

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString);
        con.Open();
        SqlCommand command = new SqlCommand("dbo.P_AddAccount");
        command.Connection = con;
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@nvcAccountName", TextBoxUN.Text));
        command.Parameters.Add(new SqlParameter("@inyAccountLevelCode", 100));
        command.Parameters.Add(new SqlParameter("inyCharacterCreateLimit", 4));
        command.Parameters.Add(new SqlParameter("@inyCharacterMaxCount", 4));
        var param = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2);
        param.Value = DateTime.Now;
        command.Parameters.Add(param);
        var wrongParam = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2);
        wrongParam.Value = System.Data.SqlDbType.DateTime2;
        command.Parameters.Add(new SqlParameter("@vchLastLoginIP", null));
        command.Parameters.Add(new SqlParameter("@@IntLastSessionID", null));
        command.Parameters.Add(new SqlParameter("@vchJoinIP", null));
        command.Parameters.Add(new SqlParameter("@inyPublisherCode", 4));
        command.Parameters.Add(new SqlParameter("@inyGenderCode", null));
        command.Parameters.Add(new SqlParameter("@DaTBirthDate", null));
        command.Parameters.Add(new SqlParameter("@vchPassphrase", TextBoxPass.Text));
        command.Parameters.Add(new SqlParameter("@inyNationalityCode", null));
        command.Parameters.Add(new SqlParameter("@inyChannelPartnerCode", null));
        command.Parameters.Add(new SqlParameter("@EmailAddress", TextBoxEA.Text));
        command.Parameters.Add(new SqlParameter("@FullName", TextBoxFN.Text));
        command.Parameters.Add(new SqlParameter("@Country", DropDownListCountry.SelectedValue));
        command.ExecuteNonQuery();
        con.Close();


    }

1 个答案:

答案 0 :(得分:1)

SqlDBType.DataTime2MSDN reference)是Enum,在执行参数时将转换为int(值33)。您需要在执行时为设置提供您希望设置为参数的实际DateTime值。样本将是:

var param = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2);
param.Value = System.DateTime.Now;
command.Parameters.Add(param);

这将创建一个带参数名称和数据类型的新参数。接下来,我们将参数的值设置为DateTime.Now或您选择的日期值。最后,这将被添加到paramters集合中。

现在,在您的示例中,Parameters.AddWithValue()方法接受两个参数。参数的名称(即@dt2LastLoginDate)以及在执行期间设置参数的值。因此可以重写此语句可以重写为:

var wrongParam = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2);
wrongParam.Value = System.Data.SqlDbType.DateTime2;

您可以看到将值设置为SqlDbType.DateTime2

的枚举值