Преобразование не удалось в одном коде, но не в другом - PullRequest
0 голосов
/ 27 февраля 2019

Я пишу небольшую часть программного обеспечения и один из моих методов, включая обновление определенного столбца в моей базе данных.Мне удалось добиться успеха с помощью этого кода:

        private void btnTestInstall_Click(object sender, EventArgs e)
    {
        string c = txtChange.Text;
        var uid = myDataTest.Rows[0].Cells[1].Value.ToString();
        DataSet ds = new DataSet();
        string sql = "SELECT id FROM installations WHERE id = '" + c + "'";
        SqlCommand cmx = new SqlCommand(sql, conn);
        conn.Open();
        cmx.ExecuteNonQuery();
        SqlDataAdapter da = new SqlDataAdapter(cmx);
        da.Fill(ds);
        if (ds.Tables[0].Rows.Count > 0)
        {
            string select = ds.Tables[0].Rows[0]["id"].ToString();
                        if (select == c)
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "UPDATE aspnet_usersinroles SET InstallationId = '" + c + "' WHERE userid = '" + uid + "'";
                cmd.ExecuteNonQuery();
                MessageBox.Show("Installations ID er ændret til " + c);
            }
            else
            {
                MessageBox.Show(c + " does not exist");
            }
        }
        else
        {
            MessageBox.Show(c + " does not exist");
        }

        conn.Close();
    }

Но затем мне пришлось перенести его в другой проект, где у меня есть слой данных.Я разделил код, но ничего не изменил, чтобы внести в него серьезные изменения.Тем не менее, я получаю 'Преобразование не удалось при преобразовании строки символов в uniqueidentifier.' , когда я пытаюсь запустить его в новом проекте.В новом проекте он разделен следующим образом: Фрагмент формы:

public void btnTestInstall_Click(object sender, EventArgs e)
    {
        string c = txtChange.Text;
        var uid = myDataTest.Rows[0].Cells[2].ToString();
        DTestUsersDB tu = new DTestUsersDB();
        tu.InstallChange(c, uid);
    }

Фрагмент уровня данных:

        public void InstallChange(string c, string uid)
    {
        DataSet ds = new DataSet();
        string sql = "SELECT id FROM installations WHERE id = '" + c + "'";
        SqlCommand cmx = new SqlCommand(sql, conn);
        conn.Open();
        cmx.ExecuteNonQuery();
        SqlDataAdapter da = new SqlDataAdapter(cmx);
        da.Fill(ds); 
        if (ds.Tables[0].Rows.Count > 0)
        {
            string select = ds.Tables[0].Rows[0]["id"].ToString();
            if (select == c)
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "UPDATE aspnet_usersinroles SET InstallationId = '" + c + "' WHERE userid = '" + uid + "'";
                cmd.ExecuteNonQuery();                   
            }
            else
            {
            }
        }
        else
        {
        }
        conn.Close();
    }

Единственное, что изменилось, это номер столбца в

var uid = myDataTest.Rows[0].Cells[2].ToString();

потому что в новом проекте я добавил столбец перед ним.

...