CREATE
PROCEDURE
[dbo].[
Procedure
]
@param1
int
= 0,
@param2
AS
SELECT
@param1, @param2
RETURN
0
USE [CustomerDatabase]
GO
SET
ANSI_NULLS
ON
QUOTED_IDENTIFIER
[dbo].[SelectAllCustomers]
BEGIN
NOCOUNT
;
Cust.Identifier ,
Cust.CompanyName ,
Cust.ContactName ,
Cust.ContactTypeIdentifier ,
CT.ContactType
ContactTitle
FROM
Customer
Cust
INNER
JOIN
ContactTypes
CT
Cust.ContactTypeIdentifier = CT.Identifier;
END
DECLARE
@return_value
Int
EXEC
@return_value = [dbo].[SelectAllCustomers]
as
'Return Value'
public
AddCustomer(
string
companyName,
contactName,
contactTypeIdentifier)
{
mHasException =
false
try
using
(var cn =
new
SqlConnection {ConnectionString = ConnectionString})
(var cmd =
SqlCommand
Connection = cn,
CommandType = CommandType.StoredProcedure
})
cmd.CommandText =
"dbo.NewCustomer"
cmd.Parameters.Add(
SqlParameter
ParameterName =
"@CompanyName"
,
SqlDbType = SqlDbType.NVarChar
});
"@ContactName"
"@ContactTypeIdentifier"
SqlDbType = SqlDbType.Int
"@Identity"
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Output
cmd.Parameters[
].Value = companyName;
].Value = contactName;
].Value = contactTypeIdentifier;
cn.Open();
cmd.ExecuteScalar();
return
Convert.ToInt32(cmd.Parameters[
].Value);
}
catch
(Exception ex)
true
mLastException = ex;
-1;
ALTER
[dbo].[usp_ThrowDummyException]
@ErrorMessage
VARCHAR
(2000)
OUTPUT
@ErrorSeverity
INT
@ErrorState
TRY
RAISERROR(
'your message here'
, 16, 1);
CATCH
@ErrorMessage = ERROR_MESSAGE();
@ErrorSeverity = ERROR_SEVERITY();
@ErrorState = ERROR_STATE();
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
CATCH;
void
ReturnErrorInformation()
"dbo.[usp_ThrowDummyException]"
"@ErrorMessage"
SqlDbType = SqlDbType.NVarChar,
}).Value =
""
"@ErrorSeverity"
"@ErrorState"
cmd.ExecuteNonQuery();
Console.WriteLine($
"[{ex.Message}]"
);
Console.WriteLine(cmd.Parameters[
private
readonly
BackendOperations _dataOperations =
BackendOperations();
BindingSource _bsCustomers =
BindingSource();
MainForm_Shown(
object
sender, EventArgs e)
LoadCustomers();
LoadCustomers()
var customerDataTable = _dataOperations.RetrieveAllCustomerRecords();
var contactList = _dataOperations.RetrieveContactTitles();
if
(_dataOperations.IsSuccessFul)
_bsCustomers.DataSource = customerDataTable;
_bsCustomers.Sort =
"CompanyName"
DataGridView1.DataSource = _bsCustomers;
DataGridView1.ExpandColumns();
_bsCustomers.MoveFirst();
ContactTypeComboBox.DataSource = contactList;
else
MessageBox.Show($
"Failed to load data\n{_dataOperations.LastExceptionMessage}"
name
sys.procedures
WHERE
NOT
LIKE
'sp_%'
ORDER
BY
@StoredProcedureName
NVARCHAR(50) =
'dbo.CustomerInsertOrUpdate'
definition
sys.sql_modules
object_id = OBJECT_ID(@StoredProcedureName);
system_type_id,
max_length,
[
precision
],
scale
sys.parameters
@ProcName NVARCHAR(50);
@IteratorProcedureName NVARCHAR(50);
IteratorName
CURSOR
FAST_FORWARD READ_ONLY
FOR
OPEN
IteratorName;
FETCH
NEXT
INTO
@IteratorProcedureName;
WHILE @@FETCH_STATUS = 0
object_id = OBJECT_ID(@IteratorProcedureName);
CLOSE
DEALLOCATE
System.Collections.Generic;
System.Data;
Microsoft.SqlServer.Management.Sdk.Sfc;
Microsoft.SqlServer.Management.Smo;
namespace
ScriptingLibrary
class
StoredProcedureScripter
/// <summary>
/// Script stored procedures from a specific database residing in a specific
/// SQL-Server instance
/// </summary>
/// <param name="pServerName">Name of SQL-Server</param>
/// <param name="pCatalogName">Catalog to traverse Stored Procedures on</param>
/// <param name="pFileName">File name and path to write Stored Procedures too</param>
/// <remarks>
/// Exception handling intentionally left out. At least there should be a try/catch
/// around this method from the caller of this method.
/// </remarks>
Execute(
pServerName,
pCatalogName,
pFileName)
Server server =
Server(pServerName);
Database database = server.Databases[pCatalogName];
var sqlSmoObjectList =
List<SqlSmoObject>();
DataTable dataTable = database.EnumObjects(DatabaseObjectTypes.StoredProcedure);
foreach
(DataRow row
in
dataTable.Rows)
var currentSchema = (
)row[
"Schema"
];
(currentSchema ==
"sys"
|| currentSchema ==
"INFORMATION_SCHEMA"
)
continue
var sp = (StoredProcedure)server.GetSmoObject(
Urn((
"Urn"
]));
(!sp.IsSystemObject)
sqlSmoObjectList.Add(sp);
var scriptWriter =
Scripter
Server = server, Options =
IncludeHeaders =
SchemaQualify =
ToFileOnly =
FileName = pFileName
};
scriptWriter.Script(sqlSmoObjectList.ToArray());
Success GetImage(
identifier,
ref
Image inBoundImage,
description)
PROC [dbo].[ReadImage]
@imgId
ImageData ,
Description
ImageData
ImageID = @imgId;
Image inBoundImage)
byte
[] ImageToByte(Image img)
var converter =
ImageConverter();
(
[])converter.ConvertTo(img,
typeof
[]));
Success InsertImage(Image image,
description,
identifier)
SqlConnection { ConnectionString = ConnectionString })
SqlCommand { Connection = cn, CommandText =
"SaveImage"
cmd.CommandType = CommandType.StoredProcedure;
"@img"
, SqlDbType.Image).Value = ImageToByte(image);
"@description"
, SqlDbType.Text).Value = description;
"@new_identity"
SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output
identifier = Convert.ToInt32(cmd.ExecuteScalar());
Success.Okay;
Success.OhSnap;
PROC [dbo].[SaveImage]
@img IMAGE ,
@description NVARCHAR(
MAX
),
@new_identity
INSERT
dbo.ImageData ( ImageData, [Description])
VALUES
( @img, @description );
@new_identity = SCOPE_IDENTITY();
id;
[dbo].[Customer_Reader]
@CustomerIdentifier
=
NULL
@CompanyName
varchar
(50) =
Identifier ,
CompanyName ,
ContactName ,
ContactTypeIdentifier ,
GenderIdentifier
dbo.Customer
(Identifier=@CustomerIdentifier
OR
IS
AND
(CompanyName=@CompanyName
/// Get all customers
/// <returns></returns>
DataTable GetAllCustomersRecords()
var dt =
DataTable();
"dbo.[Customer_Reader]"
cmd.Parameters.AddWithValue(
"@CustomerIdentifier"
null
dt.Load(cmd.ExecuteReader());
(Exception e)
mLastException = e;
dt;
/// Get a single customer by primary key
/// <param name="identifier"></param>
DataTable GetAllCustomerRecordsByIdentifier(
, identifier);
/// Get customer by customer name
/// <param name="companyName"></param>
DataTable GetAllCustomerRecordsByCompanyName(
companyName)
, companyName);