【问题标题】:SQLiteconnection dbType always Int32 despite SqlDbType Setting尽管有 SqlDbType 设置,SQLiteconnection dbType 始终为 Int32
【发布时间】:2016-09-14 22:30:35
【问题描述】:

我有一段代码在这里准备查询:

var AssetTagParam = new SQLiteParameter("@AssetTagParam", SqlDbType.Int) { Value = item.AssetTag };
var VendorParam = new SQLiteParameter("@VendorParam", SqlDbType.Text) { Value = item.Vendor };
var DeviceParam = new SQLiteParameter("@DeviceParam", SqlDbType.Text) { Value = item.Device };
var AttributeParam = new SQLiteParameter("@AttributeParam", SqlDbType.Text) { Value = item.Attribute };
var DeviceTypeParam = new SQLiteParameter("@DeviceTypeParam", SqlDbType.Text) { Value = item.DeviceType };
var SystemParam = new SQLiteParameter("@SystemParam", SqlDbType.Text) { Value = item.System };
var LocationParam = new SQLiteParameter("@LocationParam", SqlDbType.Text) { Value = item.Location };
var OnLoanParam = new SQLiteParameter("@OnLoanParam", SqlDbType.Binary) { Value = item.OnLoan };
var NotesParam = new SQLiteParameter("@NotesParam", SqlDbType.Text) { Value = item.Notes };
var LastModifiedTimeParam = new SQLiteParameter("@LastModifiedTimeParam", SqlDbType.Text) { Value = item.LastModifiedTime };
var LastModifiedPersonParam = new SQLiteParameter("@LastModifiedPersonParam", SqlDbType.Text) { Value = item.LastModifiedPerson };
var IsDeletedParam = new SQLiteParameter("@IsDeletedParam", SqlDbType.Binary) { Value = item.IsDeleted };

SQLiteCommand insertSQL = new SQLiteCommand("INSERT INTO Inventory(AssetTag, Vendor, Device, Attribute, DeviceType, System, Notes, OnLoan, Location)" +
" VALUES (@AssetTagParam, @VendorParam, @DeviceParam, @AttributeParam, @DeviceTypeParam, @SystemParam, @NotesParam, @OnLoanParam, @LocationParam)", conn);

insertSQL.Parameters.Add(AssetTagParam);
insertSQL.Parameters.Add(VendorParam);
insertSQL.Parameters.Add(DeviceParam);
insertSQL.Parameters.Add(AttributeParam);
insertSQL.Parameters.Add(DeviceTypeParam);
insertSQL.Parameters.Add(SystemParam);
insertSQL.Parameters.Add(LocationParam);
insertSQL.Parameters.Add(OnLoanParam);
insertSQL.Parameters.Add(NotesParam);
insertSQL.Parameters.Add(LastModifiedTimeParam);
insertSQL.Parameters.Add(LastModifiedPersonParam);
insertSQL.Parameters.Add(IsDeletedParam);

作为参考,Item 类如下所示:

public class Item
{
    public int AssetID { get; set; }
    public int AssetTag { get; set; }
    public string Vendor { get; set; }
    public string Device { get; set; }
    public string Attribute { get; set; }
    public string DeviceType { get; set; }
    public string System { get; set; }
    public string Location { get; set; }
    public bool OnLoan { get; set; }
    public string Notes { get; set; }
    public string LastModifiedTime { get; set; }
    public string LastModifiedPerson { get; set; }
    public bool IsDeleted { get; set; }
}

当我运行这段代码时,我总是会遇到一般错误:

输入字符串的格式不正确。

在试图找出这个问题的根源之后,假设我在这个过程中输入了错误,我遇到了我所有的 Param 变量的dbType 设置为@987654324 的问题@。我以为我是用参数SqlDbType.Text设置的,但我一定是误会了?

如何将输入的 dbtype 设置为 Text 而不是 Int32?

【问题讨论】:

  • SqlDbType 是用于 SQLServer 的通用 DbType 应该与 SQLite 一起使用 - 您使用的是标准 NET 提供程序吗?
  • 哦,我现在明白了!将 'SqlDbType.Text' 更改为 'System.Data,DbType.String' 可以很好地解决这个问题!
  • 我认为你也不需要 Binary 作为 bool。
  • 如果你使用了另一种单行语法:cmd.Parameters.Add("@n", SqlDbType.String).Value = "something"; 它会发现类型不匹配

标签: c# sql sqlite


【解决方案1】:

我犯的错误是使用 SqlDbType 来定义数据类型。我应该一直使用 System.Data.DbType 来定义数据,所以这样:

var VendorParam = new SQLiteParameter("@VendorParam", SqlDbType.Text) { Value = item.Vendor };

应该改为:

var VendorParam = new SQLiteParameter("@VendorParam", System.Data.DbType.String) { Value = item.Vendor };

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多