Как получить последний идентификатор для загрузки изображений с AjaxFileUpload? - PullRequest
1 голос
/ 18 мая 2019

Я пытаюсь объединить 2 таблицы с помощью C # и SQL Server в Visual Studio 2017. Первая таблица добавляет onClickEvent в Planuri.Во второй таблице AjaxFileUpload1_UploadComplete должен добавить изображения в SQL.Как использовать внешний ключ (DorintaId) для загрузки изображений в ImaginiWishlist?

Я пытался после первого ExecuteNonQuery: Int32 DorintaId = (Int32) cmd.ExecuteScalar ();

{String CS= ConfigurationManager.ConnectionStrings["BudgetDBConnectionString1"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("insert into Planuri values('" + tbNumeDorinta.Text + "','" + tbTarget.Text + "','" + tbPretE.Text + "')", con);
            con.Open();
            cmd.ExecuteNonQuery();

}

, и это событие с Ajax:

{

    if (AjaxFileUpload1.HasAttributes)
    {

        string fileName = Path.GetFileName(e.FileName);
        string extension = Path.GetExtension(e.FileName);
        AjaxFileUpload1.SaveAs(Server.MapPath("~/Wishlist/" + fileName));
        String CS = ConfigurationManager.ConnectionStrings["BudgetDBConnectionString1"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("insert into ImaginiWishlist(Nume,Extensie,DorintaId) values(@Nume,@Extensie,@DorinaId)", con);


            SqlDataAdapter sda = new SqlDataAdapter();

            cmd.Parameters.AddWithValue("@Nume", fileName);
            cmd.Parameters.AddWithValue("@Extensie", extension);


           // cmd.Parameters.AddWithValue("@DorintaId", DorintaId);

            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();

РЕДАКТИРОВАТЬ: {

    string fileName = Path.GetFileName(e.FileName);
    string extension = Path.GetExtension(e.FileName);

    String CS = ConfigurationManager.ConnectionStrings["BudgetTrackDBConnectionString1"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        using (SqlCommand cmd = new SqlCommand("insert into ImaginiWishlist(Nume,Extensie,DorintaId) values(@Nume,@Extensie,@DorintaId);SELECT SCOPE_IDENTITY();", con))

        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {

                {
                    cmd.Parameters.AddWithValue("@Nume", fileName);
                    cmd.Parameters.AddWithValue("@Extensie", extension);
                    cmd.Parameters.Add("@DorintaId",SqlDbType.Int,4).Direction = ParameterDirection.Output;

                    cmd.Connection = con;
                    con.Open();
                    int id = (int)cmd.ExecuteScalar();

Каждая строка из Planuri связать загруженные изображения из ImaginiWishlist.

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Вы можете добавить @ID в коллекцию параметров и затем извлечь ее следующим образом:

{
int dorintaId = 0


     String CS = ConfigurationManager.ConnectionStrings["BudgetDBConnectionString1"].ConnectionString;
     using(SqlConnection con = new SqlConnection(CS)) {
      SqlCommand cmd = new SqlCommand("insert into Planuri values('" + tbNumeDorinta.Text + "','" + tbTarget.Text + "','" + tbPretE.Text + "'); ; SET @ID = SCOPE_IDENTITY();", con);
      cmd.Parameters.Add("@ID", SqlDbType.Int, 4).Direction = ParameterDirection.Output;
      con.Open();
      cmd.ExecuteNonQuery();

      dorintaId = (int) cmd.Parameters["@ID"].value;
     }

Теперь мы можем получить dorintaId и использовать его в ImaginiWishlist таблице:

{
    if (AjaxFileUpload1.HasAttributes)
    {

        string fileName = Path.GetFileName(e.FileName);
        string extension = Path.GetExtension(e.FileName);
        AjaxFileUpload1.SaveAs(Server.MapPath("~/Wishlist/" + fileName));
        String CS = ConfigurationManager.ConnectionStrings["BudgetDBConnectionString1"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("insert into ImaginiWishlist(Nume,Extensie,DorintaId) values(@Nume,@Extensie,@DorintaId);", con);


            SqlDataAdapter sda = new SqlDataAdapter();

            cmd.Parameters.AddWithValue("@Nume", fileName);
            cmd.Parameters.AddWithValue("@Extensie", extension);
            cmd.Parameters.AddWithValue("@DorintaId", dorintaId);

            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
0 голосов
/ 18 мая 2019

Попробуйте добавить

SELECT SCOPE_IDENTITY()

после оператора вставки, где вы хотите вернуть Id вставленной строки и использовать ExecuteScalar ()

Пожалуйста, обратитесь к следующей ссылке

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Ваша вставка в ImaginiWishlist намного лучше, так как вы используете параметры, вы должны сделать то же самое для Planuri и передать ваши три значения в качестве параметров. Кроме того, я полагаю, что вам не хватает списка имен столбцов в операторе вставки для Planuri, вам нужно добавить список столбцов, которые вы обновляете в вставке, непосредственно перед values.

Мне придется угадать, так как я не знаю структуру вашего стола, но что-то вроде:

SqlCommand cmd = new SqlCommand("insert into Planuri (NumeDorinta, Target, PretE) values('" + tbNumeDorinta.Text + "','" + tbTarget.Text + "','" + tbPretE.Text + "'); SELECT SCOPE_IDENTITY();", con);

и чтобы добавить значения в качестве параметров, я предполагаю, что в вашей таблице есть datetime для tbTarget и float для tbPertE, поэтому вы должны сделать что-то подобное для даты и времени, где вы измените CultureInfo на правильный для вашей страны

cmd.Parameters.AddWithValue("@TargetDate", Convert.ToDateTime(tbTarget.Text, CultureInfo.GetCulture("en-GB")))

или вы можете попробовать это, если ваша дата в tbTarget.Text имеет определенный формат, где вы должны изменить "dd / MM / yyyy" на ваш формат.

cmd.Parameters.AddWithValue("@TargetDate", DateTime.ParseExact(tbTarget.Text, "dd/MM/yyyy", CultureInfo.Invariant))

Для поплавка попробуйте использовать:

cmd.Parameters.AddWithValue("@PretE", Convert.ToSingle(tbPretE.Text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...