我具有以下功能来更新数据库中的某些数据:
public Boolean ModificarDireccion(DireccionBE dirBE) {
con.ConnectionString = conection.GetCon();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PERSONA.ActualizarDireccion";
try {
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@id_direccion", dirBE.Id_direccion);
cmd.Parameters.AddWithValue("@tipo_direccion", dirBE.Tipo_direccion);
cmd.Parameters.AddWithValue("@id_persona", dirBE.Id_persona);
cmd.Parameters.AddWithValue("@dir_pais", dirBE.Dir_pais);
cmd.Parameters.AddWithValue("@dir_provincia", dirBE.Dir_provincia);
cmd.Parameters.AddWithValue("@dir_ciudad", dirBE.Dir_ciudad);
cmd.Parameters.AddWithValue("@dir_distrito", dirBE.Dir_distrito);
cmd.Parameters.AddWithValue("@dir_linea_1", dirBE.Dir_linea_1);
cmd.Parameters.AddWithValue("@dir_linea_2", dirBE.Dir_linea_2);
cmd.Parameters.AddWithValue("@dir_codigo_postal", dirBE.Dir_codigo_postal);
con.Open();
cmd.ExecuteNonQuery();
success = true;
} catch (SqlException x) {
success = false;
throw new Exception(x.Message);
} finally {
if (con.State == ConnectionState.Open) {
con.Close();
}
cmd.Parameters.Clear();
}
return success;
}
使用以下存储过程:
ALTER PROCEDURE [PERSONA].[ActualizarDireccion]
(
@id_direccion [int],
@tipo_direccion [tinyint],
@id_persona [int],
@dir_pais [tinyint],
@dir_provincia [int],
@dir_ciudad [int],
@dir_distrito [int],
@dir_linea_1 [nvarchar](100),
@dir_linea_2 [nvarchar](100),
@dir_codigo_postal [varchar](10)
)
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION
UPDATE PERSONA.DIRECCION
SET tipo_direccion = @tipo_direccion, id_persona = @id_persona, dir_pais = @dir_pais, dir_provincia = @dir_provincia, dir_ciudad = @dir_ciudad, dir_distrito = @dir_distrito, dir_linea_1 = @dir_linea_1, dir_linea_2 = @dir_linea_2, dir_codigo_postal = @dir_codigo_postal
WHERE (id_direccion = @id_direccion)
COMMIT
这是表格的结构:
CREATE TABLE [PERSONA].[TELEFONO](
[id_telefono] [int] IDENTITY(1,1) NOT NULL,
[tipo_telefono] [tinyint] NOT NULL,
[id_persona] [int] NOT NULL,
[codigo_pais] [varchar](5) NOT NULL,
[campo_1] [varchar](5) NOT NULL,
[campo_2] [varchar](5) NOT NULL,
[campo_3] [varchar](5) NOT NULL,
[ext] [varchar](5) NULL,
CONSTRAINT [PK__TELEFONO_bf60e690] PRIMARY KEY CLUSTERED
(
[id_telefono] ASC,
[tipo_telefono] ASC,
[id_persona] ASC
)
) ON [PRIMARY]
GO
当我调用此函数时,它不会更新数据库。但是,如果在SSMS中手动使用它,则可以成功更新数据。我想念什么?
我尝试调试,逐步进行操作,对象“ dirBE”中包含正确的数据,但是更改仅未放入数据库中。没有错误,什么都没有。
答案 0 :(得分:1)
尝试一下。如果可行,则您的代码有问题,Visual Studio将为您生成一个可以复制(或使用)的工作代码
现在,您可以右键单击在表适配器内部进行的查询,然后选择“预览”,以使用VS来测试其运行情况,等等。
要在自己的代码中使用它,请执行以下操作:
new YourQueriesTableAdapterName().YourChosenMethodName(
dirBE.id_direccion,
...
);
ide肯定会生成工作代码(如果您想将其复制出来,则可以在YourDataSet.Designer.cs中找到,或者可以将其保留在其中,而仅使用tableadapter-本质上与您使用的是相同的东西重新处理您的代码,创建一个单独的类来调用存储过程),因此,如果遇到与您的问题相同的问题,那么我会说这归结为以下几件事之一:
er ..就是这样!
答案 1 :(得分:0)
using (SqlConnection con = new SqlConnection(conection.GetCon()))
{
using (SqlCommand cmd = new SqlCommand("PERSONA.ActualizarDireccion", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@id_direccion", SqlDbType.Int).Value = dirBE.Id_direccion;
cmd.Parameters.Add("@tipo_direccion", SqlDbType.TinyInt).Value = dirBE.Tipo_direccion;
cmd.Parameters.Add("@id_persona", SqlDbType.Int).Value = dirBE.Id_persona;
cmd.Parameters.Add("@dir_pais", SqlDbType.TinyInt).Value = dirBE.Dir_pais;
cmd.Parameters.Add("@dir_provincia", SqlDbType.Int).Value = dirBE.Dir_provincia;
cmd.Parameters.Add("@dir_ciudad", SqlDbType.Int).Value = dirBE.Dir_ciudad;
cmd.Parameters.Add("@dir_distrito", SqlDbType.Int).Value = dirBE.Dir_distrito;
cmd.Parameters.Add("@dir_linea_1", SqlDbType.NVarChar).Value = dirBE.Dir_linea_1;
cmd.Parameters.Add("@dir_linea_2", SqlDbType.NVarChar).Value = dirBE.Dir_linea_2;
cmd.Parameters.Add("@dir_codigo_postal", SqlDbType.VarChar).Value = dirBE.Dir_codigo_postal;
con.Open();
cmd.ExecuteNonQuery();
}
}