Avatar billede dragnor Juniormester
30. september 2020 - 07:28 Der er 2 kommentarer og
1 løsning

System.ArgumentException: 'Parameter is not valid.'

Hej,

Jeg har lavet lidt hygge programering i noget tid Visual Studio og med stor success indtil nu. Jeg er dog løbet ind i et problem jeg ikke lige kan finde ud af hvad jeg skal gøre med :-(

Jeg får følgende fejl:
System.ArgumentException: 'Parameter is not valid.'

Her i koden:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Munin
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
//Fejlbeskeden/cursor stopper i linjen nedenfor           
Application.Run(new Menu());
        }
    }
}

Det forekommer i forbindelse med følgende kode:
private void upd_Q()
        {
            string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
            string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
            string BNR = userName.Substring(userName.Length - 6, 6);

            using (SqlConnection connection = new SqlConnection(ConString))
            {
                try
                {
                    int curRow = -1;

                    if (dgv_C.CurrentRow.Index != -1)
                    {
                        curRow = dgv_C.CurrentRow.Index;
                    }

                    dgv_Q2.DataSource = null;
                    dgv_Q2.Rows.Clear();
                    string query = @"      SELECT        QA.T_QA_B_CASE_Q.Q_ID, QA.T_QA_B_CASE_T.T_NAME AS Taxonomy, QA.T_QA_B_QUESTIONS.Q_NAME AS Question, QA.T_QA_B_CASE_Q.Q_RESULT AS Result
                                            FROM            QA.T_QA_B_CASE_Q with (nolock) INNER JOIN
                                                                    QA.T_QA_B_QUESTIONS with (nolock) ON QA.T_QA_B_CASE_Q.Q_ID = QA.T_QA_B_QUESTIONS.Q_ID INNER JOIN
                                                                    QA.T_QA_B_CASE_T with (nolock) ON QA.T_QA_B_QUESTIONS.T_ID = QA.T_QA_B_CASE_T.T_ID
                                            WHERE        (QA.T_QA_B_CASE_Q.U_CASE_ID = '"+ dgv_C.Rows[curRow].Cells[0].Value.ToString() + "') AND (QA.T_QA_B_CASE_T.QA_TYPE =" + dgv_C.Rows[curRow].Cells[12].Value.ToString() + ") ORDER BY QA.T_QA_B_CASE_T.T_ORDER, QA.T_QA_B_QUESTIONS.Q_ORDER";
                    SqlDataAdapter da = new SqlDataAdapter(query, connection);
                    connection.Open();
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Q");
                    dgv_Q2.AutoGenerateColumns = true;
                    dgv_Q2.DataSource = ds; // dataset
                    dgv_Q2.DataMember = "Q"; // table name you need to show
                    connection.Close();
                    dgv_Q2.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                    dgv_Q2.Columns[0].Visible = false;
                }
                catch (Exception ex)
                {
                    DateTime myDateTime = DateTime.Now;
                    string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
                    userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
                    SqlConnection EL = new SqlConnection(ConString);
                    string SqlCmdText = @"  INSERT INTO [DATA].[QA].[T_QA_B_ERR_LOG]([ROW_TS],[BNR],[FORM],[MSG])
                                                VALUES(@ROW_TS,@BNR,@FORM,@MSG)";
                    SqlCommand sc = new SqlCommand(SqlCmdText, EL);
                    EL.Open();
                    sc.Parameters.Clear();
                    sc.Parameters.AddWithValue("@ROW_TS", sqlFormattedDate);
                    sc.Parameters.AddWithValue("@BNR", userName);
                    sc.Parameters.AddWithValue("@FORM", "Checker");
                    sc.Parameters.AddWithValue("@MSG", "upd_Q: " + ex.Message.ToString());
                    sc.ExecuteNonQuery();

                    EL.Close();
                }
            }
        }

Det der gør det ekstra underligt er at den ikke gør det ved først kørsel af private void upd_Q() men først anden gang den køre koden.

Kan nogen hjælpe mig til at forstå hvad jeg gør galt så jeg kan blive klogere på mine fejl?

På forhånd 1000 tak for jeres tid!
Avatar billede Rune1983 Ekspert
30. september 2020 - 07:34 #1
Mener du i Visual Studio kan køre dit program i debug mode ... så den viser linien hvor fejlen opstår. Måske det vil giv lidt mere viden omkring hvor du skal fokusere henne.
Avatar billede dragnor Juniormester
30. september 2020 - 07:50 #2
Ja det kan godt køre i debug mode. Alt virker fint, indtil jeg køre den del kode nævnt overfor 2 gange. Jeg har andre forms hvor et datagridview opdatere et andet datagridview, uden den fejl. Men i dette tilfælde fejler den anden gang den køres og det giver absolut ingen mening :-(

Problemet med fejlbeskeden er at den ikke peger på den form hvor koden udføres men stopper i selve projektet.
Avatar billede dragnor Juniormester
30. september 2020 - 08:18 #3
Jeg fandt fejlen.

Jeg har et LinkLabel og det fejler hvis man tilføjer mere end en gang hvis man glemmer at bruge Clear(); inden man tilføjer et nyt link.

Underligt at den ikke bare peger på den del af koden.

Den fejler fordi den ikke kan repræsentere 2 links på en gang tror jeg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester