当我的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();
}
答案 0 :(得分:1)
SqlDBType.DataTime2
(MSDN 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