From: Carlos Guzm?n ?l. <car...@us...> - 2004-02-13 13:07:30
|
Update of /cvsroot/firebird/NETProvider/NETProvider_15/FirebirdSql.Data.Firebird/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25229 Modified Files: FbCommand.cs FbConnection.cs Log Message: 2004-02-13 Carlos Guzmán Álvarez <car...@te...> * source/FbCommand.cs: - Fixed error in named parameters support ( Thanks to Zsombor Cserna ) Added nunit test case to FbCommandTest.cs file. * source/Gds/GdsAttachParams.cs: - Throw exception if the connection string has an invalid character set. * source/FbConnection.cs: - Improved CreateDatabase Method for allow to control overwrite of existing database (not finished yet). Index: FbCommand.cs =================================================================== RCS file: /cvsroot/firebird/NETProvider/NETProvider_15/FirebirdSql.Data.Firebird/source/FbCommand.cs,v retrieving revision 1.59 retrieving revision 1.60 diff -b -U3 -r1.59 -r1.60 --- FbCommand.cs 30 Jan 2004 17:35:00 -0000 1.59 +++ FbCommand.cs 13 Feb 2004 13:01:45 -0000 1.60 @@ -835,12 +835,15 @@ { GdsRowDescription gdsParams = this.statement.Parameters; string parameterName = String.Empty; + int index = -1; if (gdsParams != null) { for (int i = 0; i < gdsParams.SqlD; i++) { - parameterName = this.parameters[i].ParameterName; + index = -1; + parameterName = null; + if (this.namedParameters.Count != 0) { try @@ -849,11 +852,21 @@ } catch { + if (i < this.parameters.Count ) + { parameterName = this.parameters[i].ParameterName; } } - int index = this.parameters.IndexOf(parameterName); + index = this.parameters.IndexOf(parameterName); + } + else + { + index = i; + } + + if (index != -1) + { if (this.parameters[index].Value == System.DBNull.Value) { if ((gdsParams.SqlVar[i].SqlType & 1) == 0) @@ -885,16 +898,6 @@ charset.BytesPerCharacter >= 1 && charset.BytesPerCharacter <= 2) { - /* - StringBuilder msg = new StringBuilder(); - - msg.AppendFormat("Invalid length of {0} characters, max length allowed {1} characters, for parameter {2} index {3}", - byteCount, - gdsParams.SqlVar[i].SqlLen, - parameterName, - index); - */ - throw new GdsException(335544321); } @@ -964,6 +967,7 @@ } } } + } this.statement.Parameters = gdsParams; } Index: FbConnection.cs =================================================================== RCS file: /cvsroot/firebird/NETProvider/NETProvider_15/FirebirdSql.Data.Firebird/source/FbConnection.cs,v retrieving revision 1.26 retrieving revision 1.27 diff -b -U3 -r1.26 -r1.27 --- FbConnection.cs 11 Feb 2004 21:04:04 -0000 1.26 +++ FbConnection.cs 13 Feb 2004 13:01:46 -0000 1.27 @@ -236,6 +236,10 @@ /// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="CreateDatabase(System.Collections.Hashtable)"]/*'/> public static void CreateDatabase(Hashtable values) { + bool overwrite = false; + int index = 0; + byte dialect = 3; + if (!values.ContainsKey("User") || !values.ContainsKey("Password") || !values.ContainsKey("Database")) @@ -247,32 +251,38 @@ { values.Add("DataSource", "localhost"); } + if (!values.ContainsKey("Port")) { values.Add("Port", 3050); } - if (!values.ContainsKey("Dialect")) + + if (values.ContainsKey("Dialect")) { - values.Add("Dialect", 3); + dialect = Convert.ToByte(values["Dialect"]); } - else + + if (values.ContainsKey("Overwrite")) { - byte dialect = Convert.ToByte(values["Dialect"]); + overwrite = Convert.ToBoolean(values["Overwrite"]); + } if (dialect < 1 || dialect > 3) { - values["Dialect"] = 3; - } + throw new ArgumentException("Incorrect dialect."); } try { // Configure Attachment - GdsAttachParams p = new GdsAttachParams( - values["DataSource"].ToString(), - Convert.ToInt32(values["Port"]), - values["Database"].ToString(), - 8192); + GdsAttachParams p = new GdsAttachParams(); + + p.DataSource = values["DataSource"].ToString(); + p.Port = Convert.ToInt32(values["Port"]); + p.Dialect = dialect; + p.Database = values["Database"].ToString(); + p.UserName = values["User"].ToString(); + p.UserPassword = values["Password"].ToString(); // DPB configuration GdsDpbBuffer dpb = new GdsDpbBuffer(); @@ -291,7 +301,7 @@ // Database dialect dpb.Append(GdsCodes.isc_dpb_sql_dialect, - new byte[] {Convert.ToByte(values["Dialect"]), 0, 0, 0}); + new byte[] {dialect, 0, 0, 0}); // Page Size if (values.ContainsKey("PageSize")) @@ -310,11 +320,11 @@ // Character set if (values.ContainsKey("Charset")) { - int index = GdsDbAttachment.CharSets.IndexOf(values["Charset"].ToString()); + index = GdsDbAttachment.CharSets.IndexOf(values["Charset"].ToString()); if (index == -1) { - throw new ArgumentException("Character set is not valid."); + throw new ArgumentException("Incorrect Character set."); } else { @@ -324,6 +334,28 @@ } } + if (!overwrite) + { + // Check if the database exists + try + { + GdsDbAttachment connect = new GdsDbAttachment(p); + connect.Attach(); + connect.Detach(); + + GdsException ex = new GdsException(GdsCodes.isc_db_or_file_exists); + + throw new FbException(ex.Message, ex); + } + catch(FbException ex) + { + throw ex; + } + catch (Exception) + { + } + } + GdsDbAttachment db = new GdsDbAttachment(p); db.CreateDatabase(p, dpb); |