ManagerTest.Database.ExecuteSql.ExecuteScalar C# (CSharp) Method

ExecuteScalar() public method

public ExecuteScalar ( string sql, int timeout = 30, object>.IDictionary parameters = null ) : int
sql string
timeout int
parameters object>.IDictionary
return int
		public int ExecuteScalar(string sql, int timeout = 30, IDictionary<string, object> parameters = null)
		{
			parameters = parameters ?? new Dictionary<string, object>();

			var result = 0;
			HandleWithRetry(sql, s =>
			{
				var regex = new Regex("^GO", RegexOptions.IgnoreCase | RegexOptions.Multiline);
				var allScripts = regex.Split(sql);
				var statements = allScripts.Where(x => !string.IsNullOrWhiteSpace(x));

				using (var connection = _openConnection())
				{
					using (var transaction = connection.BeginTransaction())
					{
						using (var command = connection.CreateCommand())
						{
							command.Transaction = transaction;

							foreach (var parameter in parameters)
							{
								command.Parameters.AddWithValue(parameter.Key, parameter.Value);
							}
							command.CommandTimeout = timeout;

							foreach (var statement in statements)
							{
								command.CommandText = statement;
								command.CommandType = CommandType.Text;
								result = (int) (command.ExecuteScalar() ?? default(int));
							}

							transaction.Commit();
						}
					}
				}
			}, 0);

			return result;
		}

Usage Example

示例#1
0
 public bool Exists(string databaseName)
 {
     return
         (Convert.ToBoolean(_executeMaster.ExecuteScalar("SELECT database_id FROM sys.databases WHERE Name = @databaseName",
                                                         parameters:
                                                         new Dictionary <string, object> {
         { "@databaseName", databaseName }
     })));
 }