C#DataColumn将byte []转换为带表达式的字符串

时间:2017-10-18 15:58:41

标签: c# sql-server byte datacolumn

我创建必须在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();
    }
}

0 个答案:

没有答案