Я работаю над проектом C# с базой данных SQL Server. У меня есть хранящаяся процедура Prrole , которая выполняет insert , обновление и удаление операции в таблице tblrole . Столбец Roleid является столбцом идентификации, поэтому он не требуется для вставки , но требуется для обновления и delete .
Когда я вызываю хранимую процедуру из моей C# Cod />system.data.sqlclient.sqlexception (0x80131904): процедура или функция 'prrole' ожидает параметр '@Roleid', который не был предоставлен < /p>
< /blockquote>
Здесь не была предоставлена Procure < /p>: < /p>
здесь хранящаяся процедура < /code>: < /p>
Здесь хранятся процедура < /prole < /code>: < /p>
.CREATE PROCEDURE [dbo].[prcRole]
@Operation NVARCHAR(100),
@RoleID INT,
@RoleName NVARCHAR(255),
@User INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF @Operation = 'INSERT'
BEGIN
INSERT INTO tblRole (RoleName, CreatedBy, DateCreated, LastEditedBy,DateEdited)
VALUES (@RoleName, @User, GETDATE(), @User, GETDATE());
END
IF @Operation = 'UPDATE'
BEGIN
UPDATE tblRole
SET RoleName = @RoleName, LastEditedBy = @User, DateEdited = GETDATE()
WHERE RoleID = @RoleID;
END
IF @Operation = 'DELETE'
BEGIN
DELETE FROM tblRole WHERE RoleID = @RoleID;
END
SELECT * FROM tblRole;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
THROW;
END CATCH; END GO
< /code>
Вот мой код C#, который вызывает хранимую процедуру: < /p>
private DataTable prcRole(string Operation, Role role)
{
DataTable dt = new DataTable();
try
{
using (SqlConnection con = new SqlConnection("Server=localhost\\MSERVERSQL;Database=DBPharmacy;Trusted_Connection=True;"))
{
using (SqlCommand cmd = new SqlCommand("prcRole", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Operation", Operation);
cmd.Parameters.AddWithValue("@RoleID", role.RoleID);
cmd.Parameters.AddWithValue("@RoleName", role.RoleName);
cmd.Parameters.AddWithValue("@User", 1); // 1 will be replaced with actual logged in user
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
sda.Fill(dt);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return dt;
}
Вот кнопку обработчика Button1_click , который запускает операцию вставки - Тип пользователя в имени роли в текстовом поле и нажмите кнопку «Добавить», где его необходимо добавить в базу данных:
private void button1_Click(object sender, EventArgs e)
{
try
{
string roleName = txtRoleName.Text.Trim(); // Get the role name from the text box
if (string.IsNullOrEmpty(roleName))
{
MessageBox.Show("Please enter a role name.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
Classes.Role newRole = new Classes.Role(0, roleName);
newRole.INSERT();
MessageBox.Show("Role added successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtRoleName.Clear();
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -procedure
C# и SQL Server: получение ошибки в хранимой процедуре ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение