【发布时间】:2015-08-07 15:54:37
【问题描述】:
我第一次使用 SQL Compact 4.0 并尝试将数据插入到 IMAGE 列中,并且大部分数据约为 50kbytes。
我遇到的问题是,虽然图像列应该足够大,但数据被截断为 8000 字节。
我正在使用 SqlCeParameter 插入数据。大小已设置为匹配 byte[] (43402) 的长度,SqlDbType 为 SqlDbType.Image。
在你可以看到的数据库中,所有的行都是 8000 字节(使用 datalength 函数)。
我怀疑这是数据库架构本身的问题,也许是为 IMAGE 列设置的默认大小,我希望可以覆盖它。有趣的是,该参数具有基本 DbType.Binary - 根据 Microsoft 的规定,它限制为 8000 字节 - 可能是红鲱鱼!
====
因为我无法添加任何图像,grrrrr。以下是更多信息:
这是我构建命令的代码。 _params 只是一个字典,其中包含每个参数名称和数据:
var cmd = connection.CreateCommand();
cmd.CommandText = _command;
foreach(var p in _params)
{
var param = SqlHelper.CreateSqlCeParameter(p);
cmd.Parameters.Add(param);
if(param.SqlDbType == System.Data.SqlDbType.Image)
{
param.Size = (p.Value as byte[]).Length;
}
}
cmd.ExecuteNonQuery();
使用这个帮助类来创建参数:
public class SqlHelper
{
public static SqlDbType MapToSqlCeType(object data)
{
if(data.GetType() == typeof(string))
{
return SqlDbType.NVarChar;
}
if(data.GetType() == typeof(byte[]))
{
return SqlDbType.Image;
}
return SqlDbType.NVarChar;
}
internal static SqlCeParameter CreateSqlCeParameter(KeyValuePair<string, object> data)
{
return new SqlCeParameter(data.Key, SqlHelper.MapToSqlCeType(data.Value))
{
Value = data.Value
};
}
}
我用来检查的 SQL: 选择前 10 个数据长度([数据]) FROM [数据模块]; 去吧
结果: 第 1 列 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000
【问题讨论】:
-
图像列最大为 1 GB。你能展示一下参数是如何构建的,也许那里有一个错误?显式设置 SqlDbType 很重要
-
我已经添加了上面的代码来演示如何创建参数。我可以确认命令上的参数在命令执行时看起来一切正常。
标签: c# sql-server-ce sql-server-ce-4 sql-server-ce-toolbox