예제 #1
0
파일: utils.cs 프로젝트: katshann/ogen
			public static string ParseParameter(
				string connectionstring_in, 
				eDBServerTypes dbServerTypes_in, 
				eParameter parameter_in
			) {
				switch (parameter_in) {
					case eParameter.Database: {
						return ParseParameter(connectionstring_in, dbServerTypes_in, "database");
					}
					case eParameter.Server: {
						return ParseParameter(connectionstring_in, dbServerTypes_in, "server");
					}
					case eParameter.User: {
						switch (dbServerTypes_in) {
#if PostgreSQL
							case eDBServerTypes.PostgreSQL: {
								return ParseParameter(connectionstring_in, dbServerTypes_in, "User ID");
							}
#endif
#if MySQL
							case eDBServerTypes.MySQL:
#endif
							case eDBServerTypes.SQLServer: {
								return ParseParameter(connectionstring_in, dbServerTypes_in, "uid");
							}
						}
						break;
					}
				}
				throw new Exception(
					string.Format(
						"{0}.{1}.ParseParameter(): - error parsing db connectionstring: '{2}'",
						typeof(Connectionstring).Namespace,
						typeof(Connectionstring).Name,
						connectionstring_in
					)
				);
			}
예제 #2
0
파일: utils.cs 프로젝트: katshann/ogen
			public static string ParseParameter(
				string connectionstring_in, 
				eDBServerTypes dbServerTypes_in, 
				string parameter_in
			) {
				System.Text.RegularExpressions.Regex fields_reg = new System.Text.RegularExpressions.Regex(
					string.Format("^(?<before>.*){0}=(?<param>.*);(?<after>.*)", parameter_in),
					System.Text.RegularExpressions.RegexOptions.IgnoreCase
				);
				System.Text.RegularExpressions.Match matchingfields = fields_reg.Match(connectionstring_in);
				if (!matchingfields.Success) {
					throw new Exception(
						string.Format(
							"{0}.{1}.ParseParameter(): - error parsing db connectionstring: '{2}'",
							typeof(Connectionstring).Namespace,
							typeof(Connectionstring).Name,
							connectionstring_in
						)
					);
				} else {
					return matchingfields.Groups["param"].Value;
				}
			}
예제 #3
0
파일: utils.cs 프로젝트: katshann/ogen
			// <summary>
			// Aimed for code generator, hence returning straight string.
			// </summary>
			public static string DBType2DBEmptyValue(DbType dbType_in, eDBServerTypes dbServerType_in) {
				switch (dbType_in) {
					case DbType.DateTime:
					case DbType.Date:
					case DbType.Time: {
						return object2SQLobject(
							new DateTime(1900, 1, 1), 
							dbServerType_in
						);
					}
					case DbType.Int16: 
					case DbType.Int32: 
					case DbType.Int64:
					case DbType.UInt16: 
					case DbType.UInt32: 
					case DbType.UInt64:
					case DbType.Byte: 
					case DbType.Single: 
					case DbType.Double: 
					case DbType.Decimal:
					case DbType.Boolean: {
						return "0";
					}
					case DbType.String: {
						return "''";
					}
					case DbType.Binary: {
						return "new Byte[] {}";
					}

					// ToDos: here!
				}
				throw new Exception(string.Format(
					"undefined variable type: {0}",
					dbType_in.ToString() // dbType_in.GetType().ToString()
				));
			}
예제 #4
0
파일: utils.cs 프로젝트: katshann/ogen
			/// <summary>
			/// Converts any .net framework object value to a string that can be used to buil an SQL Query.
			/// </summary>
			/// <param name="object_in">.net framework object value to be converted</param>
			/// <param name="dbServerType_in">DataBase Server Type</param>
			/// <returns>a string that can be used to buil an SQL Query</returns>
			public static string object2SQLobject(object object_in, eDBServerTypes dbServerType_in) {
				if (object_in == null) {
					switch (dbServerType_in) {
#if PostgreSQL
						case eDBServerTypes.PostgreSQL:
#endif
#if MySQL
						case eDBServerTypes.MySQL:
#endif
						case eDBServerTypes.SQLServer: {
							return "null";
						}
					}
				} else {
					switch (object_in.GetType().ToString()) {
						case "System.Char":
						case "System.String": {
							switch (dbServerType_in) {
								//case eDBServerTypes.PostgreSQL: {
								//	// ToDos: here! check if changes made are correct (I need test units for this)
								//	// return string.Format("''{0}''", object_in.ToString ().Replace("'", "''"));
								//	return string.Format("'{0}'", object_in.ToString ().Replace("'", "''"));
								//}
								case eDBServerTypes.SQLServer: {
									return string.Format("\'{0}\'", object_in.ToString ().Replace("\'", "\'\'"));
								}
							}
							break;
						}
						case "System.DateTime": {
							DateTime _datetime = ((DateTime)object_in);
							if (DateTime.Compare(_datetime, DateTime.MinValue) == 0) {
								return object2SQLobject(null, dbServerType_in);
							} else {
								switch (dbServerType_in) {
#if MySQL
									case eDBServerTypes.MySQL:
#endif
#if PostgreSQL
									case eDBServerTypes.PostgreSQL:
										// ToDos: here! check if changes made are correct (I need test units for this)
										// return string.Format("timestamp ''{0}''", _datetime.ToString("yyyy-MM-dd HH:mm:ss"));
										return string.Format("timestamp '{0}'", _datetime.ToString("yyyy-MM-dd HH:mm:ss"));
#endif
									case eDBServerTypes.SQLServer:
										return string.Format("CONVERT(DATETIME, \'{0}\', 120)", _datetime.ToString("yyyy-MM-dd HH:mm:ss"));
								}
							}
							break;
						}
						case "System.Boolean": {
							switch (dbServerType_in) {
#if MySQL
								case eDBServerTypes.MySQL:
#endif
#if PostgreSQL
								case eDBServerTypes.PostgreSQL:
									return (((bool)object_in) ? "true" : "false");
#endif
								case eDBServerTypes.SQLServer:
									return (((bool)object_in) ? "1" : "0");
							}
							break;
						}
						case "System.Int16":
						case "System.Int32":
						case "System.Int64":
						case "System.Double":
						case "System.Decimal":
						case "System.Single": {
							switch (dbServerType_in) {
								//case eDBServerTypes.PostgreSQL: {
								//	return object_in.ToString().Replace(",", ".");
								//}
								case eDBServerTypes.SQLServer: {
									// ToDos: here! this will likely change accordingly with regional 
									// settings configurations, I need to come up with a better 
									// approach to this:
									return object_in.ToString().Replace(",", ".");
								}
							}
							break;
						}
						case "System.DBNull": {
							return object2SQLobject(null, dbServerType_in);
						}
					}
				}
				throw new Exception (string.Format(
					"not implemented for: {0}",
					object_in.GetType().ToString()
				));
			}
예제 #5
0
		private static string sqlview_delete(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
				case eDBServerTypes.SQLServer:
					return string.Format(
						"DROP VIEW {0}",
						name_in
					);
#if MySQL
				case eDBServerTypes.MySQL:
					return string.Format(
						"DROP VIEW `{0}`",
						name_in
					);
#endif
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
					// ToDos: here! not implemented, needed if droping, 
					// no need when replacing, you can use:
					// CREATE OR REPLACE VIEW "some_view"
#endif
				default: {
					throw new Exception(
						string.Format(
							"{0}.{1}.sqlview_delete(): - not implemented!", 
							typeof(cDBConnection).Namespace, 
							typeof(cDBConnection).Name
						)
					);
				}
			}
		}
예제 #6
0
파일: utils.cs 프로젝트: katshann/ogen
				//---
				#region public void Parameters(...);
				/// <summary>
				/// Uses a range of parameters to build the ConnectionString.
				/// </summary>
				/// <param name="serverName_in">database server name/ip</param>
				/// <param name="userName_in">database user</param>
				/// <param name="userPassword_in">database user password</param>
				/// <param name="dataBaseName_in">database name</param>
				/// <param name="dbServerTypes_in">database type</param>
				/// <returns>ConnectionString</returns>
				public static string Parameters(
					string serverName_in, 
					string userName_in, 
					string userPassword_in, 
					string dataBaseName_in, 
					eDBServerTypes dbServerTypes_in
				) {
					switch (dbServerTypes_in) {
						case eDBServerTypes.SQLServer:
							return string.Format(
								"server={0};uid={1};pwd={2};database={3};", 
								serverName_in, 
								userName_in, 
								userPassword_in, 
								dataBaseName_in
							);
#if PostgreSQL
						case eDBServerTypes.PostgreSQL:
							return string.Format(
								"Server={0};User ID={1};Password={2};Database={3};", 
								serverName_in, 
								userName_in, 
								userPassword_in, 
								dataBaseName_in
							);
#endif
#if MySQL
						case eDBServerTypes.MySQL:
							return string.Format(
								"Server={0};Uid={1};Pwd={2};Database={3};",
								serverName_in,
								userName_in,
								userPassword_in,
								dataBaseName_in
							);
#endif
						case eDBServerTypes.ODBC:
						case eDBServerTypes.Access:
						case eDBServerTypes.Excel:
						default:
							throw new Exception("invalid DBServerType");
					}
				}
예제 #7
0
		private static string sqlstoredprocedure_delete(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
				case eDBServerTypes.SQLServer: {
					return string.Format(
						"DROP PROCEDURE {0}",
						name_in
					);
				}
#if MySQL
				case eDBServerTypes.MySQL: {
					return string.Format(
						"DROP PROCEDURE `{0}`",
						name_in
					);
				}
#endif
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
					// ToDos: here! not implemented
					// NOTES: It's not as easy as it is for SQLServer and MySQL. PostgreSQL 
					// allows you to create diferent signatures for the same procedure, so in 
					// order to drop a procedure we need to know the parameters for such 
					// procedure.
					// To overcome such probleme, remember that in PostgreSQL you can use:
					// CREATE OR REPLACE PROCEDURE "some_procedure"
					// PostgreSQL supports Stored Procedures.
#endif
				default: {
					throw new Exception(
						string.Format(
							"{0}.{1}.sqlstoredprocedure_delete(): - not implemented!", 
							typeof(cDBConnection).Namespace, 
							typeof(cDBConnection).Name
						)
					);
				}
			}
		}
예제 #8
0
		private /*static*/ string sqlview_exists(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
#endif
				case eDBServerTypes.SQLServer:
					return string.Format(
						#region "SELECT ...", 
						@"
SELECT null
FROM INFORMATION_SCHEMA.TABLES
WHERE
	(TABLE_TYPE = 'VIEW')
	AND
	(TABLE_NAME = '{0}')
", 
						#endregion
						name_in
					);
#if MySQL
				case eDBServerTypes.MySQL:
					string _database = Connectionstring_database();
					return string.Format(
						#region "SELECT ...", 
@"
SELECT null
FROM INFORMATION_SCHEMA.TABLES
WHERE
	(TABLE_TYPE = 'VIEW')
	AND
	(TABLE_NAME = '{0}')
	AND
	(TABLE_SCHEMA = '{1}')
", 
						#endregion
						name_in, 
						_database
					);
#endif
				default:
					throw new Exception(string.Format(
						"{0}.{1}.sqlview_exists(): - not implemented!",
						typeof(cDBConnection).Namespace,
						typeof(cDBConnection).Name
					));
			}
		}
예제 #9
0
		private /*static*/ string sqlstoredprocedure_exists(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
#endif
				case eDBServerTypes.SQLServer:
					return string.Format(
						#region "SELECT ...", 
						@"
SELECT null
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
	(routine_type = 'PROCEDURE')
	AND
	(routine_name = '{0}')
", 
						#endregion
						name_in
					);
#if MySQL
				case eDBServerTypes.MySQL:
					string _database = Connectionstring_database();
					return string.Format(
						#region "SELECT ...", 
						@"
SELECT null
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
	(routine_type = 'PROCEDURE')
	AND
	(routine_name = '{0}')
	AND
	(routine_schema = '{1}')
", 
						#endregion
						name_in, 
						_database
					);
#endif
				default: {
					throw new Exception("not implemented");
				}
			}
		}
예제 #10
0
		private static string sqlfunction_delete(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
				case eDBServerTypes.SQLServer: {
					return string.Format(
						"DROP FUNCTION {0}",
						name_in
					);
				}
#if MySQL
				case eDBServerTypes.MySQL: {
					return string.Format(
						"DROP FUNCTION `{0}`",
						name_in
					);
				}
#endif
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
					// ToDos: here! not implemented
					// NOTES: It's not as easy as it is for SQLServer and MySQL. PostgreSQL 
					// allows you to create diferent signatures for the same function, so in 
					// order to drop a function we need to know the parameters for such 
					// function.
					// To overcome such probleme, remember that in PostgreSQL you can use:
					// CREATE OR REPLACE FUNCTION "some_function"
#endif
				default: {
					throw new Exception(
						string.Format(
							"{0}.{1}.sqlfunction_delete(): - not implemented!", 
							typeof(cDBConnection).Namespace, 
							typeof(cDBConnection).Name
						)
					);
				}
			}
		}
예제 #11
0
		private /*static*/ string sqlfunction_exists(string name_in, eDBServerTypes dbServerType_in) {
			switch (dbServerType_in) {
#if PostgreSQL
				case eDBServerTypes.PostgreSQL:
#endif
				case eDBServerTypes.SQLServer:
					return string.Format(
						#region "SELECT ...", 
						@"
SELECT null
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
	(routine_type = 'FUNCTION')
	AND
	(routine_name = '{0}')
", 
						#endregion
						name_in
					);
#if MySQL
				case eDBServerTypes.MySQL:
					string _database = Connectionstring_database();
					return string.Format(
						#region "SELECT ...", 
@"
SELECT null
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
	(routine_type = 'FUNCTION')
	AND
	(routine_name = '{0}')
	AND
	(routine_schema = '{1}')
", 
						#endregion
						name_in, 
						_database
					);
#endif
				default:
					throw new Exception(string.Format(
						"{0}.{1}.sqlfunction_exists(): - not implemented!",
						typeof(cDBConnection).Namespace,
						typeof(cDBConnection).Name
					));
			}
		}
예제 #12
0
		/// <param name="dbServerType_in">DataBase Server Type</param>
		/// <param name="connectionstring_in">Connection String</param>
		/// <param name="Logfile_in">Log File</param>
		public cDBConnection(
			eDBServerTypes dbServerType_in, 
			string connectionstring_in, 
			string Logfile_in
		) : this (
			dbServerType_in, 
			connectionstring_in
		) {
			if (
				(Logfile_in == null) 
				||
				(Logfile_in == string.Empty) 
				||
				(!File.Exists(Logfile_in))
			) {
				Logenabled = false;
				Logfile = null;
			} else {
				Logenabled = true;
				Logfile = Logfile_in;
			}
		}
예제 #13
0
//		#region public cDBConnection(...);
		/// <param name="dbServerType_in">DataBase Server Type</param>
		/// <param name="connectionstring_in">Connection String</param>
		public cDBConnection(
			eDBServerTypes dbServerType_in, 
			string connectionstring_in
		) {
			Logenabled = false;
			Logfile = null;

			dbservertype_ = dbServerType_in;
			isopen_ = false;
			connectionstring_ = connectionstring_in;
		}