static void Main(string[] args) { string tmpString = string.Empty; StreamWriter fstr_out = null; FbConnection cn = null; FbCommand cmd = null; FbDataReader rdr = null; FbDataAdapter da = null; DataTable tmpDataTable = null; object tmpObject; int tmpInt = int.MinValue; long tmpLong = long.MinValue; try { try { fstr_out = new StreamWriter("log.log", false, System.Text.Encoding.GetEncoding(1251)); fstr_out.AutoFlush = true; ConnectionStringSettingsCollection connectionStrings = ConfigurationManager.ConnectionStrings; if (connectionStrings != null) { try { tmpString = connectionStrings["FirebirdServer"].ConnectionString; } catch { tmpString = string.Empty; } } cn = new FbConnection(tmpString); cn.StateChange += new StateChangeEventHandler(conn_StateChange); cn.InfoMessage += new FbInfoMessageEventHandler(conn_InfoMessage); cn.Open(); fstr_out.WriteLine("ConnectionString: " + cn.ConnectionString); fstr_out.WriteLine("ConnectionTimeout: " + cn.ConnectionTimeout.ToString()); fstr_out.WriteLine("Database: " + cn.Database); fstr_out.WriteLine("DataSource: " + cn.DataSource); fstr_out.WriteLine("PacketSize: " + cn.PacketSize); fstr_out.WriteLine("ServerVersion: " + cn.ServerVersion); fstr_out.WriteLine("State: " + cn.State.ToString()); fstr_out.WriteLine(); #if TEST_COMMENT if (cmd == null) { cmd = cn.CreateCommand(); } cmd.CommandType = CommandType.Text; cmd.CommandText = "select 5/**/*3 from rdb$database"; tmpObject = cmd.ExecuteScalar(); #endif #if TEST_SMTH if (cmd == null) { cmd = cn.CreateCommand(); } cmd.CommandType = CommandType.Text; cmd.CommandText = "select * from TestDate order by FDate"; cmd.Parameters.Clear(); if (da == null) { da = new FbDataAdapter(cmd); } else { da.SelectCommand = cmd; } if (tmpDataTable != null) { tmpDataTable.Reset(); } else { tmpDataTable = new DataTable(); } da.Fill(tmpDataTable); tmpString = ""; for (int i = 0; i < tmpDataTable.Rows.Count; ++i) { if (tmpString != string.Empty) { tmpString += " "; } tmpString += Convert.ToDateTime(tmpDataTable.Rows[i]["FDate"]).ToString("yyyy-MM-dd"); } #endif if (tmpDataTable != null) { tmpDataTable.Reset(); } else { tmpDataTable = new DataTable(); } fstr_out.WriteLine("FbConnection.GetSchema()"); tmpDataTable = cn.GetSchema(); tmpString = string.Empty; foreach (DataColumn col in tmpDataTable.Columns) { if (tmpString != string.Empty) { tmpString += "\t"; } tmpString += col.ColumnName; } fstr_out.WriteLine("\t" + tmpString); foreach (DataRow row in tmpDataTable.Rows) { tmpString = string.Empty; foreach (DataColumn col in tmpDataTable.Columns) { if (tmpString != string.Empty) { tmpString += "\t"; } tmpString += !row.IsNull(col.ColumnName) ? row[col.ColumnName] : "NULL"; } fstr_out.WriteLine("\t" + tmpString); } fstr_out.WriteLine(); cmd = cn.CreateCommand(); cmd.Transaction = cn.BeginTransaction(new FbTransactionOptions { TransactionBehavior = FbTransactionBehavior.ReadCommitted } /*IsolationLevel.ReadCommitted*/); cmd.CommandType = CommandType.Text; cmd.CommandText = "select * from \"Staff\""; rdr = cmd.ExecuteReader(); do { if (rdr.HasRows) { for (int i = 0; i < rdr.FieldCount; ++i) { fstr_out.WriteLine(rdr.GetName(i) + " GetDataTypeName(): \"" + rdr.GetDataTypeName(i) + "\" GetFieldType(): \"" + rdr.GetFieldType(i) + "\""); } while (rdr.Read()) { fstr_out.WriteLine(rdr["Name"] + " " + rdr["Salary"]); } } } while (rdr.NextResult()); rdr.Close(); if (tmpDataTable != null) { tmpDataTable.Reset(); } else { tmpDataTable = new DataTable(); } if (da != null) { da.SelectCommand = cmd; } else { da = new FbDataAdapter(cmd); } da.Fill(tmpDataTable); foreach (DataRow row in tmpDataTable.Rows) { fstr_out.WriteLine(row["Name"] + " " + row["Salary"]); } #if TEST_STORED_PROCEDURES if (cmd == null) { cmd = cn.CreateCommand(); } cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "SP1"; FbCommandBuilder.DeriveParameters(cmd); for (int i = 0; i < cmd.Parameters.Count; ++i) { fstr_out.WriteLine(cmd.Parameters[i].ParameterName + " " + cmd.Parameters[i].Direction + " " + cmd.Parameters[i].FbDbType + " " + cmd.Parameters[i].DbType); } cmd.Parameters["@ARGFIRST"].Value = 7; cmd.Parameters["@ARGSECOND"].Value = 8; cmd.ExecuteNonQuery(); if (!Convert.IsDBNull(cmd.Parameters["@RESULT"].Value)) { fstr_out.WriteLine(cmd.Parameters["@RESULT"].Value); } cmd.CommandText = "SP1_1"; FbCommandBuilder.DeriveParameters(cmd); cmd.Parameters["@ARGFIRST"].Value = 20; cmd.Parameters["@ARGSECOND"].Value = 8; cmd.ExecuteNonQuery(); if (!Convert.IsDBNull(cmd.Parameters["@RESULT"].Value)) { fstr_out.WriteLine(cmd.Parameters["@RESULT"].Value); } cmd.CommandType = CommandType.Text; cmd.CommandText = "select * from SP1_1 (?, ?)"; cmd.Parameters.Clear(); FbParameter tmpParameter; tmpParameter = cmd.CreateParameter(); tmpParameter.Direction = ParameterDirection.Input; tmpParameter.DbType = DbType.Decimal; tmpParameter.ParameterName = "@ARGSECOND"; tmpParameter.Value = 8; cmd.Parameters.Add(tmpParameter); tmpParameter = cmd.CreateParameter(); tmpParameter.Direction = ParameterDirection.Input; tmpParameter.DbType = DbType.Decimal; tmpParameter.ParameterName = "@ARGFIRST"; tmpParameter.Value = 20; cmd.Parameters.Add(tmpParameter); if ((tmpObject = cmd.ExecuteScalar()) != null && !Convert.IsDBNull(tmpObject)) { tmpInt = Convert.ToInt32(tmpObject); } fstr_out.WriteLine(tmpInt); if (tmpDataTable != null) { tmpDataTable.Reset(); } else { tmpDataTable = new DataTable(); } if (da != null) { da.SelectCommand = cmd; } else { da = new FbDataAdapter(cmd); } da.Fill(tmpDataTable); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "SP2"; FbCommandBuilder.DeriveParameters(cmd); for (int i = 0; i < cmd.Parameters.Count; ++i) { fstr_out.WriteLine(cmd.Parameters[i].ParameterName + " " + cmd.Parameters[i].Direction + " " + cmd.Parameters[i].FbDbType + " " + cmd.Parameters[i].DbType); } cmd.Parameters["@TESTID"].Value = 1; if (tmpDataTable != null) { tmpDataTable.Reset(); } else { tmpDataTable = new DataTable(); } if (da != null) { da.SelectCommand = cmd; } else { da = new FbDataAdapter(cmd); } da.Fill(tmpDataTable); /* * cmd.CommandType = CommandType.Text; * cmd.CommandText = "{call SP2(?, ?)}"; * cmd.Parameters.Clear(); * * tmpParameter = cmd.CreateParameter(); * tmpParameter.Direction = ParameterDirection.Input; * tmpParameter.DbType = DbType.Int32; * tmpParameter.ParameterName = "@TESTID"; * tmpParameter.Value = 1; * cmd.Parameters.Add(tmpParameter); * * tmpParameter = cmd.CreateParameter(); * tmpParameter.Direction = ParameterDirection.Output; * tmpParameter.DbType = DbType.String; * tmpParameter.ParameterName = "@TESTVALUE"; * cmd.Parameters.Add(tmpParameter); * * if (tmpDataTable != null) * tmpDataTable.Reset(); * else * tmpDataTable = new DataTable(); * * if (da != null) * da.SelectCommand = cmd; * else * da = new FbDataAdapter(cmd); * * da.Fill(tmpDataTable); */ cmd.Parameters.Clear(); cmd.CommandType = CommandType.Text; //cmd.CommandText = "\"Stub\""; //error //cmd.CommandText = "exec \"Stub\""; //error //cmd.CommandText = "execute \"Stub\""; //error cmd.CommandText = "execute procedure \"Stub\""; cmd.ExecuteNonQuery(); //cmd.CommandText = "{call \"Stub\"}"; //error //cmd.ExecuteNonQuery(); #endif #if TEST_BLOB cmd.CommandType = CommandType.Text; FileStream fs; byte[] Blob; #if TEST_BLOB_SAVE cmd.CommandText = "update \"TestDataTypes\" set \"CBlob\" = @CBlob"; cmd.Parameters.Clear(); cmd.Parameters.Add("@CBlob", FbDbType.Binary); fs = new FileStream("welcome.bmp", FileMode.Open, FileAccess.Read); Blob = new byte[fs.Length]; fs.Read(Blob, 0, Blob.Length); cmd.Parameters["@CBlob"].Value = Blob; tmpInt = cmd.ExecuteNonQuery(); #endif cmd.CommandText = "select * from \"TestDataTypes\""; cmd.Parameters.Clear(); rdr = cmd.ExecuteReader(); do { if (rdr.HasRows) { for (int i = 0; i < rdr.FieldCount; ++i) { fstr_out.WriteLine(rdr.GetName(i) + " GetDataTypeName(): \"" + rdr.GetDataTypeName(i) + "\" GetFieldType(): \"" + rdr.GetFieldType(i) + "\""); } tmpInt = rdr.GetOrdinal("CBlob"); while (rdr.Read()) { tmpString = "FromBlob.bmp"; if (File.Exists(tmpString)) { File.Delete(tmpString); } if (!rdr.IsDBNull(tmpInt)) { Blob = (byte[])rdr["CBlob"]; fs = new FileStream(tmpString, FileMode.Create); fs.Write(Blob, 0, Blob.Length); fs.Close(); } tmpString = "FromBlob_1.bmp"; if (File.Exists(tmpString)) { File.Delete(tmpString); } if (!rdr.IsDBNull(tmpInt)) { tmpLong = rdr.GetBytes(tmpInt, 0, null, 0, int.MaxValue); Blob = new byte[tmpLong]; rdr.GetBytes(tmpInt, 0, Blob, 0, Blob.Length); fs = new FileStream(tmpString, FileMode.Create); fs.Write(Blob, 0, Blob.Length); fs.Close(); } } } } while (rdr.NextResult()); rdr.Close(); #endif cmd.Transaction.Rollback(); /* * cn.ChangeDatabase("E:\\USI.Fil\\Base\\NODE.IB6"); * fstr_out.WriteLine(conn.Database); * * cmd.Transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted); * * cmd.CommandType = CommandType.Text; * cmd.CommandText = "select * from \"Filial\""; * tmpDataTable.Reset(); * da.Fill(tmpDataTable); * * cmd.Transaction.Rollback(); */ cmd = null; cn.Close(); } catch (Exception eException) { Console.WriteLine(eException.GetType().FullName + Environment.NewLine + "Message: " + eException.Message + Environment.NewLine + "StackTrace:" + Environment.NewLine + eException.StackTrace); } } finally { if (rdr != null && !rdr.IsClosed) { rdr.Close(); } if (cmd != null) { cmd.Transaction.Rollback(); } if (cn != null && cn.State == ConnectionState.Open) { cn.Close(); } if (fstr_out != null) { fstr_out.Close(); } } }