我创建必须在datable中检索的SQL查询(它是数据提供者的约束) 我的目标是限制数据表上的处理循环(可能有几百万行) 我有一个Gupta SQLBASE 11.6数据库及其.net数据提供程序 我使用下面的代码来检索数据库的内容并对其进行操作。 LONGVARCHAR列(相当于sql server的Varchar(Max))作为byte []
接收我在表格中添加了一列并定义了一个表达式。
tempcol.Expression = System.String.Format("Convert({0}, System.String)", ds.Tables[0].Columns[CurrentColumn].ColumnName);
不幸的是,这会将列的类型作为字符串返回(" System.Byte []")
您是否有想法将这种类型的列转换为文本形式而不进行循环?
public void MakeSQLBaseConnection(string StringQuery) {
SQLBaseConnection sqconn = new SQLBaseConnection(constr);
string err = "Log is saved to C:\\OurErrorlog2.txt. \r\n\r\nSQLBase .NET Provider Error: \r\nConnection String: " + constr + "\r\n";
try {
sqconn.Open();
SQLBaseDataAdapter sqad = new SQLBaseDataAdapter(StringQuery, sqconn);
DataSet ds = new DataSet();
sqad.Fill(ds);
for (int CurrentColumn = 0; CurrentColumn < ds.Tables[0].Columns.Count; CurrentColumn++) {
if (ds.Tables[0].Columns[CurrentColumn].DataType == typeof(char[]) || ds.Tables[0].Columns[CurrentColumn].DataType == typeof(byte[])) {
DataColumn tempcol = new DataColumn();
tempcol.DataType = System.Type.GetType("System.String");
tempcol.Caption = ds.Tables[0].Columns[CurrentColumn].Caption;
tempcol.ColumnName = ds.Tables[0].Columns[CurrentColumn].ColumnName;
ds.Tables[0].Columns[CurrentColumn].Caption = System.String.Concat(ds.Tables[0].Columns[CurrentColumn].Caption, "_hidden");
ds.Tables[0].Columns[CurrentColumn].ColumnName = ds.Tables[0].Columns[CurrentColumn].Caption;
ds.Tables[0].Columns[CurrentColumn].ColumnMapping = MappingType.Hidden;
tempcol.Expression = System.String.Format("Convert({0}, System.String)", ds.Tables[0].Columns[CurrentColumn].ColumnName);
ds.Tables[0].Columns.Add(tempcol);
tempcol.SetOrdinal(ds.Tables[0].Columns[CurrentColumn].Ordinal);
CurrentColumn++;
}
}
dataGrid1.DataSource = ds.Tables[0].DefaultView;
sqconn.Close();
} catch (SQLBaseException myException) {
err += "Message: " + myException.Message + "\r\n";
err += "StackTrace: \r\n" + myException.StackTrace.ToString();
MessageBox.Show(err);
StreamWriter s = new StreamWriter(".\\OurErrorlog2.txt", true);
s.Write(err);
s.Close();
}
}