DBMaster5.2中通过ODBC从Long Varchar类型读取数据时如何避免读取双倍内容的问题?
在一个类型为Long Varchar的列中插入大量纯文本数据,然后使用JDBA工具读取,查询结果是正确的。但是如果使用ASP.NET读取则会读取到双倍的内容。示例AP代码部分如下:
string strSQL = @"SELECT LNSOURCE FROM TMP_FLNAME WHERE PUBLISH = 'N0'
AND FLCODE = ?;";
OdbcConnection Conn = new OdbcConnection(strConnLaw);
Conn.Open();
OdbcCommand Comm = new OdbcCommand(strSQL, Conn);
Comm.Parameters.Add("FLCODE", OdbcType.Char, 8).Value = hidFLCode.Value.Trim();
OdbcDataReader dr = Comm.ExecuteReader();
if (dr.Read())
{
// The datatype of LNSOURCE is long varchar
Response.Write("<pre>" + dr["LNSOURCE"].ToString()+"</pre>");
}
dr.Close();
Conn.Close();
我们可以使用OleDb去避免双倍读取问题,但是请注意用户需要确认在连接字符串中 “Provide”应该为”Provider=DMOLE52” 而不是”Provider=DMOLE52.1”。
另外,如果用户坚持使用ODBC,他们可以通过修改AP来避免双重内容读取问题,使用DataReader 的“GetChars”and add ”CommandBehavior.SequentialAccess”可以读取数据。
OdbcDataReader dr = Comm.ExecuteReader(CommandBehavior.SequentialAccess);
if (dr.Read())
{
char[] buffer;
int iStart = 0;
long returnLen;
buffer = new char[256];
returnLen = dr.GetChars(0, iStart, buffer, 0, 256);
richTextBox1.Text += new string(buffer);
while (returnLen > 0)
{
iStart += (int)returnLen;
returnLen = dr.GetChars(0, iStart, buffer, 0, 256);
richTextBox1.Text += new string(buffer);
}
}
dr.Close();
Conn.Close();
版本: DBMaster 5.x, 4.3
产品: 评估板/普通
平台:所有