simsen Juniormester
09. januar 2021 - 22:44 Der er 3 kommentarer og
2 løsninger

Sql db og mvc

Hej,
Nu har jeg været ved at gå fuldstændig grassat over en fejl, jeg har knoklet med i 3 dage. Jeg har hele tiden troet, det var en fejl i mvc men er ikke så sikker mere.

Nu har jeg fundet ud af hvad fejlen er, men ikke hvorfor, og hvordan jeg retter den.

Jeg har en EmployeeBusinessLayer klasse her henter jeg en liste af Employees fra en sql databasen. Der er flere felter Id, Navn (og den vigtige) Gender. Gender består af en DataType nvarchar(100) og ja jeg ved godt det er alt for meget - lige nu leger jeg bare.

Alt kommer fint ud, undtagen Gender. I tabellen har jeg lavet flere Employees og her har jeg så valgt nogle er Female i Gender og andre er Male.

Tager jeg og laver en select eller kører den stored procedure jeg har lavet, så viser den fint kolonnen med Gender hvor der står Male/Female nedad. Der er  INGEN blanke felter efter.

Nu henter jeg så de employees ind, og pludselig, så er der blanke felter efter Female/Male teksterne.

Hvor skal jeg fejlfinde henne, for at finde ud af om hvem, det er der putter blanke felter bagefter dem (det er kun der det er galt ikke i de andre tekstfelter) og ikke mindst hvordan jeg retter det?

Her er min BusinessLayer
public IEnumerable<Employee> Employees
        {
            get
            {
                string connectionString = ConfigurationManager.ConnectionStrings["EmployeeContext"].ConnectionString;

                List<Employee> employees = new List<Employee>();

                using (SqlConnection con = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand("spEmployees_GetAll", con)
                    {
                        CommandType = CommandType.StoredProcedure
                    };
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Employee employee = new Employee
                        {
                            Id = Convert.ToInt32(rdr["EmployeeId"]),
                            Name = rdr["Name"].ToString(),
                            City = rdr["City"].ToString(),
                            Gender = rdr["Gender"].ToString()
                        };
                        if (!(rdr["DateOfBirth"] is DBNull))
                        {
                            employee.DateOfBirth = Convert.ToDateTime(rdr["DateOfBirth"]);
                        }

                        employees.Add(employee);
                    }
                }

                return employees;
            }
        }

Her er min stored procedure
USE [MyFirstMvc]
GO
/****** Object:  StoredProcedure [dbo].[spEmployees_GetAll]    Script Date: 09-01-2021 22:41:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        AS
-- Create date: 02-01-2021
-- Description:    Employees
-- =============================================
ALTER PROCEDURE [dbo].[spEmployees_GetAll]
   
AS
BEGIN
    SET NOCOUNT ON;

    SELECT *
    from tblEmployee
END
keysersoze Guru
09. januar 2021 - 23:40 #1
Kunne det tænkes at feltet engang har været nchar?

Noget helt andet er, at det ikke lyder som den optimale måde at håndtere gender på hvis man kigger på normalformer og evt også multi language.
arne_v Ekspert
10. januar 2021 - 01:11 #2
Hvad viser:

SELECT LEN(gender),CONCAT('|',gender,'|') FROM tabelnavn

?
arne_v Ekspert
10. januar 2021 - 01:13 #3
Jeg har ioevrigt aldrigt kunnet lide kode som:

                          Id = Convert.ToInt32(rdr["EmployeeId"]),
                            Name = rdr["Name"].ToString(),
                            City = rdr["City"].ToString(),
                            Gender = rdr["Gender"].ToString()

Jeg foretraekker:

                          Id = (int)rdr["EmployeeId"],
                            Name = (string)rdr["Name"],
                            City = (string)rdr["City"],
                            Gender = (string)rdr["Gender"]

Hvis man aendrer data type i databasen, saa faar man en exception fremfor et mystisk resultat (.ToString giver ikke fejl).
simsen Juniormester
10. januar 2021 - 11:39 #4
keysersoze
Det kan helt sikkert godt være tilfældet (= engang imellem glemmer jeg at checke, jeg har valgt nvarcar og så ændrer jeg det, når jeg ser, jeg har lavet forkert). Hvad har det af betydning (når jeg nu har ændret det til nvarcar)?

arne_v
Den viser i No Colum Name, at der står der IMale....................| (punktummerne er lig med mellemrum.

Mht. til koden  Id = Convert.ToInt32(rdr["EmployeeId"]), så laver jeg det lige pt nøjagtig som videoerne siger. Men jeg kan da godt forstå, hvad du siger, det giver jo ret meget mening, så mange tak for tippet.
keysersoze Guru
10. januar 2021 - 11:52 #5
Hvis feltet har været nchar vil alle felter være padded til den længde feltet har været - så er du nødt til at lave en update på alle felter hvor du trimmer.
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

Opret Preview

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





Premium
Test: Huawei Sound X er hvad du får, når du giver en smart-højttaler det hvide snit
Smarthøjttaleren fra den kinesiske teknologi-kæmpe er desværre handikappet af storpolitik. Det er der ikke desto mindre kommet et godt slagtilbud ud af.
Computerworld
Spotify på vej med kæmpe satsning: Vil være mere end blot en musikstreamingtjeneste
Svenske Spotify er klar med en række nyheder, der rækker længere end blot lyd.
CIO
Der findes ikke noget vigtigere for din virksomhedskultur end psychological safety
Klumme: Forskningen er entydig: Vidensarbejde er mere effektiv, når du tør stille spørgsmål, rejse kritik og indrømme fejl helt uden frygt for at blive straffet eller gjort til grin. Hvis du ikke har fokus på denne del af din virksomhedskultur, så lever din virksomhed og dine medarbejdere ikke op til deres fulde potentiale.
Job & Karriere
IBM Danmark trækker tilbud om frivillige fratrædelser tilbage for stort antal ansatte: "IBM har taget røven på sine ansatte"
Som led i IBM Danmarks store fyringsrunde fik 130 ansatte grønt lys til at forlade selskabet på en frivillig fratrædelsesordning. Men nu har IBM Danmark trukket det oprindelige tilbud tilbage for størstedelen af de ansatte.
White paper
Benefits of Automating P2P Processes
Purchasing and accounting departments are under constant pressure to boost efficiency. An ever-increasing number of processes to be managed; vacancies that cannot be filled; rising compliance demands: these are just some of the reasons why already heavy workloads keep growing. However, digitalizing and automating operational business processes can help reduce these workloads considerably. And when repetitive manual tasks such as data entry are eliminated, employees are freed up to focus on more challenging tasks. This white paper will outline just which tasks can be automated in purchasing and accounts payable departments, from issuing purchase requisitions to filing invoices in line with auditing standards. We will describe how daily operations in Purchasing and Accounting are changing, as well as the benefits that automation offers.